Prechádzať zdrojové kódy

* mips: Added support for unaligned load/store. It greatly improves performance and prevents bus errors on systems which do not emulate unaligned memory access.

git-svn-id: trunk@45871 -
yury 5 rokov pred
rodič
commit
cc936710a0
1 zmenil súbory, kde vykonal 12 pridanie a 0 odobranie
  1. 12 0
      compiler/mips/cgcpu.pas

+ 12 - 0
compiler/mips/cgcpu.pas

@@ -465,6 +465,12 @@ var
 begin
   if (TCGSize2Size[fromsize] < TCGSize2Size[tosize]) then
     a_load_reg_reg(list,fromsize,tosize,reg,reg);
+  if (ref.alignment<>0) and
+     (ref.alignment<tcgsize2size[tosize]) then
+    begin
+      a_load_reg_ref_unaligned(list,FromSize,ToSize,reg,ref);
+      exit;
+    end;
   case tosize of
     OS_8,
     OS_S8:
@@ -491,6 +497,12 @@ var
 begin
   if (TCGSize2Size[fromsize] >= TCGSize2Size[tosize]) then
     fromsize := tosize;
+  if (ref.alignment<>0) and
+     (ref.alignment<tcgsize2size[fromsize]) then
+     begin
+       a_load_ref_reg_unaligned(list,FromSize,ToSize,ref,reg);
+       exit;
+     end;
   case fromsize of
     OS_S8:
       Op := A_LB;{Load Signed Byte}