summaryrefslogtreecommitdiff
path: root/compiler/powerpc
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-04-26 21:24:20 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-04-26 21:24:20 +0000
commit6e5d25f14f7fdf942ef19750c44ead30adb273b1 (patch)
tree622f92aa200bd0dc2af8a0936a791fc56e090395 /compiler/powerpc
parentf8b94812781648d7dc4fd5b4978bc2f2d94776f8 (diff)
parent6787605e0df68adfdfe48ad184ffc5843e3ad7d0 (diff)
downloadfpc-6e5d25f14f7fdf942ef19750c44ead30adb273b1.tar.gz
* synchronised with trunk up to r21067
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/jvmbackend@21068 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/powerpc')
-rw-r--r--compiler/powerpc/nppcadd.pas186
-rw-r--r--compiler/powerpc/rappcgas.pas3
2 files changed, 1 insertions, 188 deletions
diff --git a/compiler/powerpc/nppcadd.pas b/compiler/powerpc/nppcadd.pas
index f72f6cf767..00e424baab 100644
--- a/compiler/powerpc/nppcadd.pas
+++ b/compiler/powerpc/nppcadd.pas
@@ -546,192 +546,6 @@ interface
{*****************************************************************************
- AddMMX
-*****************************************************************************}
-
-{$ifdef SUPPORT_MMX}
- procedure ti386addnode.second_addmmx;
- var
- op : TAsmOp;
- cmpop : boolean;
- mmxbase : tmmxtype;
- hregister : tregister;
- begin
- pass_left_and_right;
-
- cmpop:=false;
- mmxbase:=mmx_type(left.resultdef);
- case nodetype of
- addn :
- begin
- if (cs_mmx_saturation in current_settings.localswitches) then
- begin
- case mmxbase of
- mmxs8bit:
- op:=A_PADDSB;
- mmxu8bit:
- op:=A_PADDUSB;
- mmxs16bit,mmxfixed16:
- op:=A_PADDSB;
- mmxu16bit:
- op:=A_PADDUSW;
- end;
- end
- else
- begin
- case mmxbase of
- mmxs8bit,mmxu8bit:
- op:=A_PADDB;
- mmxs16bit,mmxu16bit,mmxfixed16:
- op:=A_PADDW;
- mmxs32bit,mmxu32bit:
- op:=A_PADDD;
- end;
- end;
- end;
- muln :
- begin
- case mmxbase of
- mmxs16bit,mmxu16bit:
- op:=A_PMULLW;
- mmxfixed16:
- op:=A_PMULHW;
- end;
- end;
- subn :
- begin
- if (cs_mmx_saturation in current_settings.localswitches) then
- begin
- case mmxbase of
- mmxs8bit:
- op:=A_PSUBSB;
- mmxu8bit:
- op:=A_PSUBUSB;
- mmxs16bit,mmxfixed16:
- op:=A_PSUBSB;
- mmxu16bit:
- op:=A_PSUBUSW;
- end;
- end
- else
- begin
- case mmxbase of
- mmxs8bit,mmxu8bit:
- op:=A_PSUBB;
- mmxs16bit,mmxu16bit,mmxfixed16:
- op:=A_PSUBW;
- mmxs32bit,mmxu32bit:
- op:=A_PSUBD;
- end;
- end;
- end;
- xorn:
- op:=A_PXOR;
- orn:
- op:=A_POR;
- andn:
- op:=A_PAND;
- else
- internalerror(200403183);
- end;
-
- { left and right no register? }
- { then one must be demanded }
- if (left.location.loc<>LOC_MMXREGISTER) then
- begin
- if (right.location.loc=LOC_MMXREGISTER) then
- begin
- location_swap(left.location,right.location);
- toggleflag(nf_swapped);
- end
- else
- begin
- { register variable ? }
- if (left.location.loc=LOC_CMMXREGISTER) then
- begin
- hregister:=rg.getregistermm(current_asmdata.CurrAsmList);
- emit_reg_reg(A_MOVQ,S_NO,left.location.register,hregister);
- end
- else
- begin
- if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
- internalerror(200203245);
-
- location_release(current_asmdata.CurrAsmList,left.location);
-
- hregister:=rg.getregistermm(current_asmdata.CurrAsmList);
- emit_ref_reg(A_MOVQ,S_NO,left.location.reference,hregister);
- end;
-
- location_reset(left.location,LOC_MMXREGISTER,OS_NO);
- left.location.register:=hregister;
- end;
- end;
-
- { at this point, left.location.loc should be LOC_MMXREGISTER }
- if right.location.loc<>LOC_MMXREGISTER then
- begin
- if (nodetype=subn) and (nf_swapped in flags) then
- begin
- if right.location.loc=LOC_CMMXREGISTER then
- begin
- emit_reg_reg(A_MOVQ,S_NO,right.location.register,R_MM7);
- emit_reg_reg(op,S_NO,left.location.register,R_MM7);
- emit_reg_reg(A_MOVQ,S_NO,R_MM7,left.location.register);
- end
- else
- begin
- if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
- internalerror(200203247);
- emit_ref_reg(A_MOVQ,S_NO,right.location.reference,R_MM7);
- emit_reg_reg(op,S_NO,left.location.register,R_MM7);
- emit_reg_reg(A_MOVQ,S_NO,R_MM7,left.location.register);
- location_release(current_asmdata.CurrAsmList,right.location);
- end;
- end
- else
- begin
- if (right.location.loc=LOC_CMMXREGISTER) then
- begin
- emit_reg_reg(op,S_NO,right.location.register,left.location.register);
- end
- else
- begin
- if not(right.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
- internalerror(200203246);
- emit_ref_reg(op,S_NO,right.location.reference,left.location.register);
- location_release(current_asmdata.CurrAsmList,right.location);
- end;
- end;
- end
- else
- begin
- { right.location=LOC_MMXREGISTER }
- if (nodetype=subn) and (nf_swapped in flags) then
- begin
- emit_reg_reg(op,S_NO,left.location.register,right.location.register);
- location_swap(left.location,right.location);
- toggleflag(nf_swapped);
- end
- else
- begin
- emit_reg_reg(op,S_NO,right.location.register,left.location.register);
- end;
- end;
-
- location_freetemp(current_asmdata.CurrAsmList,right.location);
- location_release(current_asmdata.CurrAsmList,right.location);
- if cmpop then
- begin
- location_freetemp(current_asmdata.CurrAsmList,left.location);
- location_release(current_asmdata.CurrAsmList,left.location);
- end;
- set_result_location(cmpop,true);
- end;
-{$endif SUPPORT_MMX}
-
-
-{*****************************************************************************
pass_2
*****************************************************************************}
diff --git a/compiler/powerpc/rappcgas.pas b/compiler/powerpc/rappcgas.pas
index 83d1ddd351..3e17bfe023 100644
--- a/compiler/powerpc/rappcgas.pas
+++ b/compiler/powerpc/rappcgas.pas
@@ -185,8 +185,7 @@ Unit rappcgas;
{ replace global symbol reference with TOC entry name
for AIX }
if target_info.system in systems_aix then
- oper.opr.ref.symbol:=
- tcgppcgen(cg).get_aix_toc_sym(oper.opr.ref.symbol.name,asmsym2indsymflags(oper.opr.ref.symbol));
+ tcgppcgen(cg).get_aix_toc_sym(nil,oper.opr.ref.symbol.name,asmsym2indsymflags(oper.opr.ref.symbol),oper.opr.ref,true);
oper.opr.ref.refaddr:=addr_pic_no_got;
end;
Consume_RParen;