proper x86 i32→float convert definiton
This commit is contained in:
parent
f72f554a54
commit
ccb1f5fa34
@ -53,8 +53,7 @@ def arithChk2{F==__mul, M, w:T=[_](i16), x:T if hasarch{'X86_64'}} = {
|
|||||||
}
|
}
|
||||||
def arithChk2{F==__mul, M, w:T=[_](i32), x:T if hasarch{'X86_64'}} = {
|
def arithChk2{F==__mul, M, w:T=[_](i32), x:T if hasarch{'X86_64'}} = {
|
||||||
max:= re_el{f32, (ty_u{T})**0x4efffffe}
|
max:= re_el{f32, (ty_u{T})**0x4efffffe}
|
||||||
def cf32{x:X} = emit{re_el{f32,X}, tern{T==[8]i32, '_mm256_cvtepi32_ps', '_mm_cvtepi32_ps'}, x}
|
f32mul:= cvt{f32,w} * cvt{f32,x}
|
||||||
f32mul:= cf32{w} * cf32{x}
|
|
||||||
tup{w*x, tup{'any_hom', M{__abs{f32mul} >= max}}}
|
tup{w*x, tup{'any_hom', M{__abs{f32mul} >= max}}}
|
||||||
# TODO fallback to the below if the above fails
|
# TODO fallback to the below if the above fails
|
||||||
# TODO don't do this, but instead shuffle one half, do math, unshuffle that half
|
# TODO don't do this, but instead shuffle one half, do math, unshuffle that half
|
||||||
|
|||||||
@ -92,6 +92,10 @@ local def avx_cmp{a:V, b:V, imm} = ty_u{emit{V, intrin_t{V, 'cmp'}, a, b, imm}}
|
|||||||
def unord{a:V, b:V if w256f{V} and hasarch{'AVX'}} = avx_cmp{a,b,3}
|
def unord{a:V, b:V if w256f{V} and hasarch{'AVX'}} = avx_cmp{a,b,3}
|
||||||
def unord{a:V, b:V if w128f{V}} = ty_u{emit{V, intrin_t{V, 'cmpunord'}, a, b}}
|
def unord{a:V, b:V if w128f{V}} = ty_u{emit{V, intrin_t{V, 'cmpunord'}, a, b}}
|
||||||
|
|
||||||
|
def cvt{RE, x:V=[k]E if isfloat{RE} and vecs{V,32} and hase{V}} = {
|
||||||
|
def RV = [k]RE
|
||||||
|
emit{RV, intrin_t{RV, 'cvtepi32'}, x}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# int stuff
|
# int stuff
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user