Browse Source

* cvt*2* can't write to memory location, fixed

florian 21 years ago
parent
commit
1c569cbd08
1 changed files with 16 additions and 2 deletions
  1. 16 2
      compiler/x86/cgx86.pas

+ 16 - 2
compiler/x86/cgx86.pas

@@ -665,13 +665,24 @@ unit cgx86;
 
 
 
 
     procedure tcgx86.a_loadmm_reg_ref(list: taasmoutput; fromsize, tosize : tcgsize;reg: tregister; const ref: treference;shuffle : pmmshuffle);
     procedure tcgx86.a_loadmm_reg_ref(list: taasmoutput; fromsize, tosize : tcgsize;reg: tregister; const ref: treference;shuffle : pmmshuffle);
+       var
+         hreg : tregister;
        begin
        begin
          if shuffle=nil then
          if shuffle=nil then
            begin
            begin
              list.concat(taicpu.op_reg_ref(A_MOVQ,S_NO,reg,ref));
              list.concat(taicpu.op_reg_ref(A_MOVQ,S_NO,reg,ref));
            end
            end
          else if shufflescalar(shuffle) then
          else if shufflescalar(shuffle) then
-           list.concat(taicpu.op_reg_ref(get_scalar_mm_op(fromsize,tosize),S_NO,reg,ref))
+           begin
+             if tosize<>fromsize then
+               begin
+                 hreg:=getmmregister(list,tosize);
+                 list.concat(taicpu.op_reg_reg(get_scalar_mm_op(fromsize,tosize),S_NO,reg,hreg));
+                 list.concat(taicpu.op_reg_ref(get_scalar_mm_op(tosize,tosize),S_NO,hreg,ref));
+               end
+             else
+               list.concat(taicpu.op_reg_ref(get_scalar_mm_op(fromsize,tosize),S_NO,reg,ref))
+           end
          else
          else
            internalerror(200312252);
            internalerror(200312252);
        end;
        end;
@@ -1626,7 +1637,10 @@ unit cgx86;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.134  2004-11-01 10:30:06  peter
+  Revision 1.135  2004-11-01 15:42:47  florian
+    * cvt*2* can't write to memory location, fixed
+
+  Revision 1.134  2004/11/01 10:30:06  peter
     * fixed uninited var in a_load_reg_ref
     * fixed uninited var in a_load_reg_ref
 
 
   Revision 1.133  2004/10/31 21:45:04  peter
   Revision 1.133  2004/10/31 21:45:04  peter