From e6d09ab2a9ffdd88cd0f6f7a2295bf4878b5a986 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Thu, 6 Feb 2025 06:22:17 -0800 Subject: [PATCH] implement floating point multiply and divide (#20829) --- compiler/src/dmd/backend/arm/cod2.d | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/compiler/src/dmd/backend/arm/cod2.d b/compiler/src/dmd/backend/arm/cod2.d index 9786bb9555..519ec0bd98 100644 --- a/compiler/src/dmd/backend/arm/cod2.d +++ b/compiler/src/dmd/backend/arm/cod2.d @@ -117,6 +117,14 @@ else cdb.gen1(INSTR.fsub_float(ftype,Rm,Rn,Rd)); // FSUB Rd,Rn,Rm break; + case OPmul: + cdb.gen1(INSTR.fmul_float(ftype,Rm,Rn,Rd)); // FMUL Rd,Rn,Rm + break; + + case OPdiv: + cdb.gen1(INSTR.fdiv_float(ftype,Rm,Rn,Rd)); // FDIV Rd,Rn,Rm + break; + default: assert(0); } @@ -225,7 +233,8 @@ void cdmul(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs) if (tyfloating(ty1)) { - assert(0); + cdorth(cg, cdb, e, pretregs); + return; } regm_t posregs = cg.allregs; @@ -280,7 +289,8 @@ void cddiv(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs) if (tyfloating(ty1)) { - assert(0); + cdorth(cg, cdb, e, pretregs); + return; } regm_t posregs = cg.allregs;