Переглянути джерело

+ Xtensa: make use of the LSX/SSX instructions

git-svn-id: trunk@47564 -
florian 4 роки тому
батько
коміт
4a05053650
2 змінених файлів з 17 додано та 6 видалено
  1. 7 2
      compiler/xtensa/agcpugas.pas
  2. 10 4
      compiler/xtensa/cgcpu.pas

+ 7 - 2
compiler/xtensa/agcpugas.pas

@@ -100,8 +100,13 @@ unit agcpugas;
               begin
                 s:=gas_regname(base);
                 if index<>NR_NO then
-                  Internalerror(2020030802);
-                s:=s+','+tostr(offset);
+                  begin
+                    s:=s+','+gas_regname(index);
+                    if offset<>0 then
+                      Internalerror(2020112402);
+                  end
+                else
+                  s:=s+','+tostr(offset);
               end;
           end;
         getreferencestring:=s;

+ 10 - 4
compiler/xtensa/cgcpu.pas

@@ -1179,11 +1179,14 @@ implementation
            InternalError(2020032602);
          href:=ref;
          if assigned(href.symbol) or
-           (href.index<>NR_NO) or
+           ((href.index<>NR_NO) and (href.offset<>0)) or
            (((href.offset<0) or (href.offset>1020) or (href.offset mod 4<>0))) then
            fixref(list,href);
 
-         list.concat(taicpu.op_reg_ref(A_LSI,reg,href));
+         if (href.base<>NR_NO) and (href.index<>NR_NO) then
+           list.concat(taicpu.op_reg_ref(A_LSX,reg,href))
+         else
+           list.concat(taicpu.op_reg_ref(A_LSI,reg,href));
 
          if fromsize<>tosize then
            a_loadfpu_reg_reg(list,fromsize,tosize,reg,reg);
@@ -1198,11 +1201,14 @@ implementation
            InternalError(2020032604);
          href:=ref;
          if assigned(href.symbol) or
-           (href.index<>NR_NO) or
+           ((href.index<>NR_NO) and (href.offset<>0)) or
            (((href.offset<0) or (href.offset>1020) or (href.offset mod 4<>0))) then
            fixref(list,href);
 
-         list.concat(taicpu.op_reg_ref(A_SSI,reg,href));
+         if (href.base<>NR_NO) and (href.index<>NR_NO) then
+           list.concat(taicpu.op_reg_ref(A_SSX,reg,href))
+         else
+           list.concat(taicpu.op_reg_ref(A_SSI,reg,href));
        end;