diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-01-07 20:40:09 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-01-07 20:40:09 +0100 |
| commit | b5de464e85af225181e5257d35ecab649196530d (patch) | |
| tree | 6d82911c9fb1351e5925f8e4549c5e413ef60e5d /src | |
| parent | 81eb0b45b3fc2653a524663cf67632d6b40ed336 (diff) | |
| download | box64-b5de464e85af225181e5257d35ecab649196530d.tar.gz box64-b5de464e85af225181e5257d35ecab649196530d.zip | |
[ARM64_DYNAREC] Added FCMEQ printer
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/arm64_emitter.h | 4 | ||||
| -rw-r--r-- | src/dynarec/arm64/arm64_printer.c | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/dynarec/arm64/arm64_emitter.h b/src/dynarec/arm64/arm64_emitter.h index bfb763b0..f86a93ec 100644 --- a/src/dynarec/arm64/arm64_emitter.h +++ b/src/dynarec/arm64/arm64_emitter.h @@ -1306,7 +1306,7 @@ int convert_bitmask(uint64_t bitmask); #define VFRSQRTSQS(Vd, Vn, Vm) EMIT(FRSQRTS_vector(1, 0, Vm, Vn, Vd)) #define VFRSQRTSQD(Vd, Vn, Vm) EMIT(FRSQRTS_vector(1, 0, Vm, Vn, Vd)) -// CMP +// CMP . NZCV: unordere=0011, eq=0110, inf=1000, sup=0010 #define FCMP_scalar(type, Rn, Rm, opc) (0b11110<<24 | (type)<<22 | 1<<21 | (Rm)<<16 | 0b1000<<10 | (Rn)<<5 | (opc)<<3) #define FCMPS(Sn, Sm) FEMIT(FCMP_scalar(0b00, Sn, Sm, 0b00)) #define FCMPD(Dn, Dm) FEMIT(FCMP_scalar(0b01, Dn, Dm, 0b00)) @@ -1835,7 +1835,7 @@ int convert_bitmask(uint64_t bitmask); #define FCMLTS_0(Rd, Rn) EMIT(FCMP_0_scalar(0, 0, 0b10, (Rn), (Rd))) #define FCMLTD_0(Rd, Rn) EMIT(FCMP_0_scalar(0, 1, 0b10, (Rn), (Rd))) -// Scalar Float CMP +// Scalar Float CMEQ #define FCMP_op_scalar(U, E, sz, Rm, ac, Rn, Rd) (0b01<<30 | (U)<<29 | 0b11110<<24 | (E)<<23 | (sz)<<22 | 1<<21 | (Rm)<<16 | 0b1110<<12 | (ac)<<11 | 1<<10 | (Rn)<<5 | (Rd)) #define FCMEQS(Rd, Rn, Rm) EMIT(FCMP_op_scalar(0, 0, 0, (Rm), 0, (Rn), (Rd))) #define FCMEQD(Rd, Rn, Rm) EMIT(FCMP_op_scalar(0, 0, 1, (Rm), 0, (Rn), (Rd))) diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c index fbb0b527..2d28a831 100644 --- a/src/dynarec/arm64/arm64_printer.c +++ b/src/dynarec/arm64/arm64_printer.c @@ -1324,6 +1324,12 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) snprintf(buff, sizeof(buff), "FCMP %c%d, %c%d", s, Rn, s, Rm); return buff; } + //FCMEQ + if(isMask(opcode, "000111100f1mmmmm111001nnnnnddddd", &a)) { + char s = (sf==0)?'S':'D'; + snprintf(buff, sizeof(buff), "FCMEQ %c%d, %c%d, %c%d", s, Rd, s, Rn, s, Rm); + return buff; + } //FCMP vector if(isMask(opcode, "0QU01110cf1mmmmm111001nnnnnddddd", &a)) { char s = (sf==0)?'S':((sf==1)?'D':'?'); |