Add encodings for square root instructions.

This commit is contained in:
Jakob Stoklund Olesen
2017-09-25 13:14:55 -07:00
parent 36585ddc4f
commit ac343ba92a
5 changed files with 45 additions and 2 deletions

View File

@@ -82,6 +82,14 @@ ebb0:
; asm: xorps %xmm5, %xmm2 ; asm: xorps %xmm5, %xmm2
[-,%xmm2] v37 = bxor v11, v10 ; bin: 0f 57 d5 [-,%xmm2] v37 = bxor v11, v10 ; bin: 0f 57 d5
; Unary arithmetic.
; asm: sqrtss %xmm5, %xmm2
[-,%xmm2] v50 = sqrt v10 ; bin: f3 0f 51 d5
; asm: sqrtss %xmm2, %xmm5
[-,%xmm5] v51 = sqrt v11 ; bin: f3 0f 51 ea
; Load/Store ; Load/Store
; asm: movd (%ecx), %xmm5 ; asm: movd (%ecx), %xmm5
@@ -192,6 +200,14 @@ ebb0:
; asm: xorps %xmm5, %xmm2 ; asm: xorps %xmm5, %xmm2
[-,%xmm2] v37 = bxor v11, v10 ; bin: 0f 57 d5 [-,%xmm2] v37 = bxor v11, v10 ; bin: 0f 57 d5
; Unary arithmetic.
; asm: sqrtsd %xmm5, %xmm2
[-,%xmm2] v50 = sqrt v10 ; bin: f2 0f 51 d5
; asm: sqrtsd %xmm2, %xmm5
[-,%xmm5] v51 = sqrt v11 ; bin: f2 0f 51 ea
; Load/Store ; Load/Store
; asm: movq (%ecx), %xmm5 ; asm: movq (%ecx), %xmm5

View File

@@ -91,6 +91,13 @@ ebb0:
; asm: xorps %xmm5, %xmm10 ; asm: xorps %xmm5, %xmm10
[-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5 [-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5
; Unary arithmetic.
; asm: sqrtss %xmm5, %xmm10
[-,%xmm10] v50 = sqrt v10 ; bin: f3 44 0f 51 d5
; asm: sqrtss %xmm10, %xmm5
[-,%xmm5] v51 = sqrt v11 ; bin: f3 41 0f 51 ea
; Load/Store ; Load/Store
; asm: movd (%r14), %xmm5 ; asm: movd (%r14), %xmm5
@@ -216,6 +223,13 @@ ebb0:
; asm: xorps %xmm5, %xmm10 ; asm: xorps %xmm5, %xmm10
[-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5 [-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5
; Unary arithmetic.
; asm: sqrtsd %xmm5, %xmm10
[-,%xmm10] v50 = sqrt v10 ; bin: f2 44 0f 51 d5
; asm: sqrtsd %xmm10, %xmm5
[-,%xmm5] v51 = sqrt v11 ; bin: f2 41 0f 51 ea
; Load/Store ; Load/Store
; asm: movq (%r14), %xmm5 ; asm: movq (%r14), %xmm5

View File

@@ -29,7 +29,12 @@ ebb0(v0: f32):
return v1 return v1
} }
; function %f32_sqrt(f32) -> f32 function %f32_sqrt(f32) -> f32 {
ebb0(v0: f32):
v1 = sqrt v0
return v1
}
; function %f32_ceil(f32) -> f32 ; function %f32_ceil(f32) -> f32
; function %f32_floor(f32) -> f32 ; function %f32_floor(f32) -> f32
; function %f32_trunc(f32) -> f32 ; function %f32_trunc(f32) -> f32

View File

@@ -26,7 +26,12 @@ ebb0(v0: f64):
return v1 return v1
} }
; function %f64_sqrt(f64) -> f64 function %f64_sqrt(f64) -> f64 {
ebb0(v0: f64):
v1 = sqrt v0
return v1
}
; function %f64_ceil(f64) -> f64 ; function %f64_ceil(f64) -> f64
; function %f64_floor(f64) -> f64 ; function %f64_floor(f64) -> f64
; function %f64_trunc(f64) -> f64 ; function %f64_trunc(f64) -> f64

View File

@@ -359,6 +359,9 @@ enc_flt(base.fpromote.f64.f32, r.furm, 0xf3, 0x0f, 0x5a)
# cvtsd2ss # cvtsd2ss
enc_flt(base.fdemote.f32.f64, r.furm, 0xf2, 0x0f, 0x5a) enc_flt(base.fdemote.f32.f64, r.furm, 0xf2, 0x0f, 0x5a)
# Exact square roots.
enc_flt(base.sqrt.f32, r.furm, 0xf3, 0x0f, 0x51)
enc_flt(base.sqrt.f64, r.furm, 0xf2, 0x0f, 0x51)
# Binary arithmetic ops. # Binary arithmetic ops.
for inst, opc in [ for inst, opc in [