浏览代码

movhlps/movlhps only take xmm registers.
Handle spilling of SSE registers.

git-svn-id: trunk@44272 -

Jeppe Johansen 5 年之前
父节点
当前提交
135a88c888
共有 2 个文件被更改,包括 9 次插入0 次删除
  1. 4 0
      compiler/x86/aasmcpu.pas
  2. 5 0
      compiler/x86/rgx86.pas

+ 4 - 0
compiler/x86/aasmcpu.pas

@@ -4777,6 +4777,8 @@ implementation
                 R_SUBQ,
                 R_SUBMMWHOLE:
                   result:=taicpu.op_ref_reg(A_VMOVQ,S_NO,tmpref,r);
+                R_SUBMMX:
+                  result:=taicpu.op_ref_reg(A_VMOVDQU,S_NO,tmpref,r);
                 else
                   internalerror(200506043);
               end
@@ -4789,6 +4791,8 @@ implementation
                 R_SUBQ,
                 R_SUBMMWHOLE:
                   result:=taicpu.op_ref_reg(A_MOVQ,S_NO,tmpref,r);
+                R_SUBMMX:
+                  result:=taicpu.op_ref_reg(A_MOVDQA,S_NO,tmpref,r);
                 else
                   internalerror(200506043);
               end;

+ 5 - 0
compiler/x86/rgx86.pas

@@ -274,6 +274,11 @@ implementation
                               A_UNPCKLPD,
                               A_UNPCKLPS :
                                 replaceoper:=-1;
+
+                              { movlhps/movhlps requires the second parameter to be XMM registers }
+                              A_MOVHLPS,
+                              A_MOVLHPS:
+                                replaceoper:=-1;
                               else
                                 ;
                             end;