瀏覽代碼

* only call cg64.a_XXX_loc for LOC_(C)REFERENCE and LOC_(C)REGISTER locations in
tcginlinenode.second_AndOrXorShiftRot_assign

git-svn-id: trunk@45301 -

nickysn 5 年之前
父節點
當前提交
5aaf863d56
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      compiler/ncginl.pas

+ 4 - 2
compiler/ncginl.pas

@@ -579,7 +579,8 @@ implementation
                 else
                   maskvalue:=maskvalue and 31;
 {$if not defined(cpu64bitalu) and not defined(cpuhighleveltarget)}
-              if def_cgsize(tcallparanode(left).right.resultdef) in [OS_64,OS_S64] then
+              if (def_cgsize(tcallparanode(left).right.resultdef) in [OS_64,OS_S64]) and
+                 (tcallparanode(tcallparanode(left).right).left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE,LOC_REGISTER,LOC_CREGISTER]) then
                 cg64.a_op64_const_loc(current_asmdata.CurrAsmList,andorxorop[inlinenumber],def_cgsize(tcallparanode(left).right.resultdef),maskvalue.svalue,tcallparanode(tcallparanode(left).right).left.location)
               else
 {$endif not cpu64bitalu and not cpuhighleveltarget}
@@ -594,7 +595,8 @@ implementation
            else
              begin
 {$if not defined(cpu64bitalu) and not defined(cpuhighleveltarget)}
-               if def_cgsize(tcallparanode(left).right.resultdef) in [OS_64,OS_S64] then
+               if (def_cgsize(tcallparanode(left).right.resultdef) in [OS_64,OS_S64]) and
+                  (tcallparanode(tcallparanode(left).right).left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE,LOC_REGISTER,LOC_CREGISTER]) then
                  cg64.a_op64_reg_loc(current_asmdata.CurrAsmList,andorxorop[inlinenumber],def_cgsize(tcallparanode(left).right.resultdef),
                    joinreg64(hregister,hregisterhi),tcallparanode(tcallparanode(left).right).left.location)
                else