Intel encodings for floating point bitwise ops.
band, bor, bxor, band_not are all available on XMM registers.
This commit is contained in:
@@ -39,6 +39,29 @@ ebb0:
|
|||||||
; asm: divss %xmm5, %xmm2
|
; asm: divss %xmm5, %xmm2
|
||||||
[-,%xmm2] v27 = fdiv v11, v10 ; bin: f3 0f 5e d5
|
[-,%xmm2] v27 = fdiv v11, v10 ; bin: f3 0f 5e d5
|
||||||
|
|
||||||
|
; Bitwise ops.
|
||||||
|
; We use the *ps SSE instructions for everything because they are smaller.
|
||||||
|
|
||||||
|
; asm: andps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v30 = band v10, v11 ; bin: 0f 54 ea
|
||||||
|
; asm: andps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v31 = band v11, v10 ; bin: 0f 54 d5
|
||||||
|
|
||||||
|
; asm: andnps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v32 = band_not v10, v11 ; bin: 0f 55 ea
|
||||||
|
; asm: andnps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v33 = band_not v11, v10 ; bin: 0f 55 d5
|
||||||
|
|
||||||
|
; asm: orps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v34 = bor v10, v11 ; bin: 0f 56 ea
|
||||||
|
; asm: orps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v35 = bor v11, v10 ; bin: 0f 56 d5
|
||||||
|
|
||||||
|
; asm: xorps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v36 = bxor v10, v11 ; bin: 0f 57 ea
|
||||||
|
; asm: xorps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v37 = bxor v11, v10 ; bin: 0f 57 d5
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,5 +97,28 @@ ebb0:
|
|||||||
; asm: divsd %xmm5, %xmm2
|
; asm: divsd %xmm5, %xmm2
|
||||||
[-,%xmm2] v27 = fdiv v11, v10 ; bin: f2 0f 5e d5
|
[-,%xmm2] v27 = fdiv v11, v10 ; bin: f2 0f 5e d5
|
||||||
|
|
||||||
|
; Bitwise ops.
|
||||||
|
; We use the *ps SSE instructions for everything because they are smaller.
|
||||||
|
|
||||||
|
; asm: andps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v30 = band v10, v11 ; bin: 0f 54 ea
|
||||||
|
; asm: andps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v31 = band v11, v10 ; bin: 0f 54 d5
|
||||||
|
|
||||||
|
; asm: andnps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v32 = band_not v10, v11 ; bin: 0f 55 ea
|
||||||
|
; asm: andnps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v33 = band_not v11, v10 ; bin: 0f 55 d5
|
||||||
|
|
||||||
|
; asm: orps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v34 = bor v10, v11 ; bin: 0f 56 ea
|
||||||
|
; asm: orps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v35 = bor v11, v10 ; bin: 0f 56 d5
|
||||||
|
|
||||||
|
; asm: xorps %xmm2, %xmm5
|
||||||
|
[-,%xmm5] v36 = bxor v10, v11 ; bin: 0f 57 ea
|
||||||
|
; asm: xorps %xmm5, %xmm2
|
||||||
|
[-,%xmm2] v37 = bxor v11, v10 ; bin: 0f 57 d5
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,29 @@ ebb0:
|
|||||||
; asm: divss %xmm5, %xmm10
|
; asm: divss %xmm5, %xmm10
|
||||||
[-,%xmm10] v27 = fdiv v11, v10 ; bin: f3 44 0f 5e d5
|
[-,%xmm10] v27 = fdiv v11, v10 ; bin: f3 44 0f 5e d5
|
||||||
|
|
||||||
|
; Bitwise ops.
|
||||||
|
; We use the *ps SSE instructions for everything because they are smaller.
|
||||||
|
|
||||||
|
; asm: andps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v30 = band v10, v11 ; bin: 41 0f 54 ea
|
||||||
|
; asm: andps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v31 = band v11, v10 ; bin: 44 0f 54 d5
|
||||||
|
|
||||||
|
; asm: andnps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v32 = band_not v10, v11 ; bin: 41 0f 55 ea
|
||||||
|
; asm: andnps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v33 = band_not v11, v10 ; bin: 44 0f 55 d5
|
||||||
|
|
||||||
|
; asm: orps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v34 = bor v10, v11 ; bin: 41 0f 56 ea
|
||||||
|
; asm: orps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v35 = bor v11, v10 ; bin: 44 0f 56 d5
|
||||||
|
|
||||||
|
; asm: xorps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v36 = bxor v10, v11 ; bin: 41 0f 57 ea
|
||||||
|
; asm: xorps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,5 +112,28 @@ ebb0:
|
|||||||
; asm: divsd %xmm5, %xmm10
|
; asm: divsd %xmm5, %xmm10
|
||||||
[-,%xmm10] v27 = fdiv v11, v10 ; bin: f2 44 0f 5e d5
|
[-,%xmm10] v27 = fdiv v11, v10 ; bin: f2 44 0f 5e d5
|
||||||
|
|
||||||
|
; Bitwise ops.
|
||||||
|
; We use the *ps SSE instructions for everything because they are smaller.
|
||||||
|
|
||||||
|
; asm: andps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v30 = band v10, v11 ; bin: 41 0f 54 ea
|
||||||
|
; asm: andps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v31 = band v11, v10 ; bin: 44 0f 54 d5
|
||||||
|
|
||||||
|
; asm: andnps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v32 = band_not v10, v11 ; bin: 41 0f 55 ea
|
||||||
|
; asm: andnps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v33 = band_not v11, v10 ; bin: 44 0f 55 d5
|
||||||
|
|
||||||
|
; asm: orps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v34 = bor v10, v11 ; bin: 41 0f 56 ea
|
||||||
|
; asm: orps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v35 = bor v11, v10 ; bin: 44 0f 56 d5
|
||||||
|
|
||||||
|
; asm: xorps %xmm10, %xmm5
|
||||||
|
[-,%xmm5] v36 = bxor v10, v11 ; bin: 41 0f 57 ea
|
||||||
|
; asm: xorps %xmm5, %xmm10
|
||||||
|
[-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,3 +236,17 @@ for inst, opc in [
|
|||||||
I32.enc(inst.f64, *r.frm(0xf2, 0x0f, opc))
|
I32.enc(inst.f64, *r.frm(0xf2, 0x0f, opc))
|
||||||
I64.enc(inst.f64, *r.frm.rex(0xf2, 0x0f, opc))
|
I64.enc(inst.f64, *r.frm.rex(0xf2, 0x0f, opc))
|
||||||
I64.enc(inst.f64, *r.frm(0xf2, 0x0f, opc))
|
I64.enc(inst.f64, *r.frm(0xf2, 0x0f, opc))
|
||||||
|
|
||||||
|
# Binary bitwise ops.
|
||||||
|
for inst, opc in [
|
||||||
|
(base.band, 0x54),
|
||||||
|
(base.band_not, 0x55),
|
||||||
|
(base.bor, 0x56),
|
||||||
|
(base.bxor, 0x57)]:
|
||||||
|
I32.enc(inst.f32, *r.frm(0x0f, opc))
|
||||||
|
I64.enc(inst.f32, *r.frm.rex(0x0f, opc))
|
||||||
|
I64.enc(inst.f32, *r.frm(0x0f, opc))
|
||||||
|
|
||||||
|
I32.enc(inst.f64, *r.frm(0x0f, opc))
|
||||||
|
I64.enc(inst.f64, *r.frm.rex(0x0f, opc))
|
||||||
|
I64.enc(inst.f64, *r.frm(0x0f, opc))
|
||||||
|
|||||||
Reference in New Issue
Block a user