mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-13 01:21:38 -07:00
@@ -235,7 +235,7 @@ atomic_compare_exchange_weak :: #force_inline proc(object, expected: ^$T, desire
|
||||
return ok
|
||||
}
|
||||
|
||||
atomic_compare_exchange_weak_explicit :: #force_inline proc(object, expected: ^$T, desited: T, success, failure: memory_order) -> bool {
|
||||
atomic_compare_exchange_weak_explicit :: #force_inline proc(object, expected: ^$T, desired: T, success, failure: memory_order) -> bool {
|
||||
assert(failure != .release)
|
||||
assert(failure != .acq_rel)
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ _ROT_16: simd.u32x4 : {16, 16, 16, 16}
|
||||
|
||||
when ODIN_ENDIAN == .Big {
|
||||
@(private = "file")
|
||||
_increment_counter :: #force_inline proc "contextless" (ctx: ^Context) -> simd.u32x4 {
|
||||
_increment_counter :: #force_inline proc "contextless" (ctx: ^_chacha20.Context) -> simd.u32x4 {
|
||||
// In the Big Endian case, the low and high portions in the vector
|
||||
// are flipped, so the 64-bit addition can't be done with a simple
|
||||
// vector add.
|
||||
|
||||
@@ -240,7 +240,7 @@ _mm_sll_epi64 :: #force_inline proc "c" (a, count: __m128i) -> __m128i {
|
||||
}
|
||||
@(require_results, enable_target_feature="sse2")
|
||||
_mm_srai_epi16 :: #force_inline proc "c" (a: __m128i, $IMM8: u32) -> __m128i {
|
||||
return transmute(__m128i)psraiw(transmute(i16x8)a. IMM8)
|
||||
return transmute(__m128i)psraiw(transmute(i16x8)a, IMM8)
|
||||
}
|
||||
@(require_results, enable_target_feature="sse2")
|
||||
_mm_sra_epi16 :: #force_inline proc "c" (a, count: __m128i) -> __m128i {
|
||||
@@ -262,7 +262,7 @@ _mm_srli_si128 :: #force_inline proc "c" (a: __m128i, $IMM8: u32) -> __m128i {
|
||||
}
|
||||
@(require_results, enable_target_feature="sse2")
|
||||
_mm_srli_epi16 :: #force_inline proc "c" (a: __m128i, $IMM8: u32) -> __m128i {
|
||||
return transmute(__m128i)psrliw(transmute(i16x8)a. IMM8)
|
||||
return transmute(__m128i)psrliw(transmute(i16x8)a, IMM8)
|
||||
}
|
||||
@(require_results, enable_target_feature="sse2")
|
||||
_mm_srl_epi16 :: #force_inline proc "c" (a, count: __m128i) -> __m128i {
|
||||
|
||||
+4
-4
@@ -48,11 +48,11 @@ map_entries :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (entries
|
||||
return
|
||||
}
|
||||
|
||||
map_entry_infos :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (entries: []Map_Entry_Info(K, V)) #no_bounds_check {
|
||||
map_entry_infos :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (entries: []Map_Entry_Info(K, V), err: runtime.Allocator_Error) #no_bounds_check {
|
||||
m := m
|
||||
rm := (^runtime.Raw_Map)(&m)
|
||||
|
||||
info := type_info_base(type_info_of(M)).variant.(Type_Info_Map)
|
||||
info := runtime.type_info_base(type_info_of(M)).variant.(runtime.Type_Info_Map)
|
||||
if info.map_info != nil {
|
||||
entries = make(type_of(entries), len(m), allocator) or_return
|
||||
|
||||
@@ -61,8 +61,8 @@ map_entry_infos :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (ent
|
||||
entry_index := 0
|
||||
for bucket_index in 0..<map_cap {
|
||||
if hash := hs[bucket_index]; runtime.map_hash_is_valid(hash) {
|
||||
key := runtime.map_cell_index_dynamic(ks, &info.map_info.ks, bucket_index)
|
||||
value := runtime.map_cell_index_dynamic(vs, &info.map_info.vs, bucket_index)
|
||||
key := runtime.map_cell_index_dynamic(ks, info.map_info.ks, bucket_index)
|
||||
value := runtime.map_cell_index_dynamic(vs, info.map_info.vs, bucket_index)
|
||||
entries[entry_index].hash = hash
|
||||
entries[entry_index].key = (^K)(key)^
|
||||
entries[entry_index].value = (^V)(value)^
|
||||
|
||||
@@ -906,7 +906,7 @@ parametric_polymorphism :: proc() {
|
||||
|
||||
// This is how `new` is implemented
|
||||
alloc_type :: proc($T: typeid) -> ^T {
|
||||
t := cast(^T)alloc(size_of(T), align_of(T))
|
||||
t := cast(^T)mem.alloc(size_of(T), align_of(T))
|
||||
t^ = T{} // Use default initialization value
|
||||
return t
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user