Преглед на файлове

m68k: unaligned handling for math and typeconv nodes

git-svn-id: trunk@33854 -
Károly Balogh преди 9 години
родител
ревизия
b4fd85f19c
променени са 2 файла, в които са добавени 6 реда и са изтрити 1 реда
  1. 2 1
      compiler/m68k/n68kcnv.pas
  2. 4 0
      compiler/m68k/n68kmat.pas

+ 2 - 1
compiler/m68k/n68kcnv.pas

@@ -191,7 +191,8 @@ implementation
          newsize:=def_cgsize(resultdef);
          opsize := def_cgsize(left.resultdef);
 
-        if (left.location.loc in [LOC_SUBSETREG,LOC_CSUBSETREG,LOC_SUBSETREF,LOC_CSUBSETREF]) then
+        if (left.location.loc in [LOC_SUBSETREG,LOC_CSUBSETREG,LOC_SUBSETREF,LOC_CSUBSETREF]) or
+           ((left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) and needs_unaligned(left.location.reference.alignment,opsize)) then
           hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,left.resultdef,true);
 
          case left.location.loc of

+ 4 - 0
compiler/m68k/n68kmat.pas

@@ -80,6 +80,10 @@ implementation
           begin
             secondpass(left);
             opsize:=def_cgsize(resultdef);
+
+            if ((left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) and needs_unaligned(left.location.reference.alignment,opsize)) then
+              hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,resultdef,true);
+
             case left.location.loc of
               LOC_FLAGS :
                 begin