From 1f8bd4a2d1c02cc6753551602823084cd7e3d2bb Mon Sep 17 00:00:00 2001 From: sergei Date: Sat, 4 May 2013 07:19:08 +0000 Subject: [PATCH] + MIPS: initial target-specific unary minus node. git-svn-id: trunk@24417 - --- compiler/mips/ncpumat.pas | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/compiler/mips/ncpumat.pas b/compiler/mips/ncpumat.pas index 275ec66e91..3310196308 100644 --- a/compiler/mips/ncpumat.pas +++ b/compiler/mips/ncpumat.pas @@ -28,7 +28,7 @@ unit ncpumat; interface uses - node, nmat, ncgmat; + node, nmat, ncgmat, cgbase; type tMIPSELmoddivnode = class(tmoddivnode) @@ -45,6 +45,10 @@ type procedure second_boolean; override; end; + TMIPSunaryminusnode = class(tcgunaryminusnode) + procedure emit_float_sign_change(r: tregister; _size : tcgsize);override; + end; + implementation uses @@ -54,7 +58,7 @@ uses aasmbase, aasmcpu, aasmtai, aasmdata, defutil, procinfo, - cgbase, cgobj, hlcgobj, pass_2, + cgobj, hlcgobj, pass_2, ncon, cpubase, ncgutil, cgcpu, cgutils; @@ -322,8 +326,26 @@ begin end; +{***************************************************************************** + TMIPSunaryminusnode +*****************************************************************************} + +procedure TMIPSunaryminusnode.emit_float_sign_change(r: tregister; _size : tcgsize); +begin + case _size of + OS_F32: + current_asmdata.CurrAsmList.concat(taicpu.op_reg_reg(A_NEG_s,r,r)); + OS_F64: + current_asmdata.CurrAsmList.concat(taicpu.op_reg_reg(A_NEG_d,r,r)); + else + internalerror(2013030501); + end; +end; + + begin cmoddivnode := tMIPSELmoddivnode; cshlshrnode := tMIPSELshlshrnode; cnotnode := tMIPSELnotnode; + cunaryminusnode := TMIPSunaryminusnode; end.