Skip to content

Commit

Permalink
Implement sqrtsd
Browse files Browse the repository at this point in the history
  • Loading branch information
tbodt committed Aug 22, 2020
1 parent 9c47ccc commit 4bc45e2
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 1 deletion.
2 changes: 2 additions & 0 deletions emu/decode.h
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,8 @@ __no_instrument DECODER_RET glue(DECODER_NAME, OP_SIZE)(DECODER_ARGS) {
case 0x5a: TRACEI("cvtsd2ss xmm:modrm, xmm");
READMODRM; V_OP(cvtsd2ss, xmm_modrm_val, xmm_modrm_reg,64); break;

case 0x51: TRACEI("sqrtsd xmm:modrm, xmm");
READMODRM; V_OP(single_fsqrt, xmm_modrm_val, xmm_modrm_reg,64); break;
case 0x58: TRACEI("addsd xmm:modrm, xmm");
READMODRM; V_OP(single_fadd, xmm_modrm_val, xmm_modrm_reg,64); break;
case 0x59: TRACEI("mulsd xmm:modrm, xmm");
Expand Down
2 changes: 2 additions & 0 deletions emu/vec.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@ void vec_single_fsub32(NO_CPU, const float *src, float *dst) { *dst -= *src; }
void vec_single_fdiv64(NO_CPU, const double *src, double *dst) { *dst /= *src; }
void vec_single_fdiv32(NO_CPU, const float *src, float *dst) { *dst /= *src; }

void vec_single_fsqrt64(NO_CPU, const double *src, double *dst) { *dst = sqrt(*src); }

void vec_single_fmax64(NO_CPU, const double *src, double *dst) {
if (*src > *dst || isnan(*src) || isnan(*dst)) *dst = *src;
}
Expand Down
1 change: 1 addition & 0 deletions emu/vec.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ void vec_single_fsub64(NO_CPU, const double *src, double *dst);
void vec_single_fsub32(NO_CPU, const float *src, float *dst);
void vec_single_fdiv64(NO_CPU, const double *src, double *dst);
void vec_single_fdiv32(NO_CPU, const float *src, float *dst);
void vec_single_fsqrt64(NO_CPU, const double *src, double *dst);

void vec_single_fmax64(NO_CPU, const double *src, double *dst);
void vec_single_fmin64(NO_CPU, const double *src, double *dst);
Expand Down
2 changes: 2 additions & 0 deletions tests/e2e/qemu/expected.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4468,6 +4468,7 @@ subsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a
minsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b333333333333400599999999999a
divsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b3333333333333fae3fdc26178701
maxsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b3333333333334046d9999999999a
sqrtsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b333333333333401b0a6bf94cb839
cmpeqsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b3333333333330000000000000000
cmpltsd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b333333333333ffffffffffffffff
cmplesd : a=c00b333333333333400599999999999a b=c04ab333333333334046d9999999999a r=c00b333333333333ffffffffffffffff
Expand All @@ -4486,6 +4487,7 @@ subsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a
minsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b3333333333334046d9999999999a
divsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b333333333333fff8000000000000
maxsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b3333333333334046d9999999999a
sqrtsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b333333333333401b0a6bf94cb839
cmpeqsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b3333333333330000000000000000
cmpltsd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b3333333333330000000000000000
cmplesd : a=c00b333333333333fff8000000000000 b=fff80000000000004046d9999999999a r=c00b3333333333330000000000000000
Expand Down
2 changes: 1 addition & 1 deletion tests/e2e/qemu/qemu-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -2625,7 +2625,7 @@ void test_sse(void)
SSE_OPD_S(min);
SSE_OPD_S(div);
SSE_OPD_S(max);
// SSE_OPD(sqrt);
SSE_OPD_S(sqrt);
SSE_OPD_S(cmpeq);
SSE_OPD_S(cmplt);
SSE_OPD_S(cmple);
Expand Down

0 comments on commit 4bc45e2

Please sign in to comment.