2
0
Эх сурвалжийг харах

+ implemened a_cmp_reg_reg_label

git-svn-id: branches/avr@17289 -
florian 14 жил өмнө
parent
commit
ed8d652398
1 өөрчлөгдсөн 43 нэмэгдсэн , 1 устгасан
  1. 43 1
      compiler/avr/cgcpu.pas

+ 43 - 1
compiler/avr/cgcpu.pas

@@ -1078,8 +1078,50 @@ unit cgcpu;
 
     procedure tcgavr.a_cmp_reg_reg_label(list : TAsmList;size : tcgsize;
       cmp_op : topcmp;reg1,reg2 : tregister;l : tasmlabel);
+      var
+        swapped : boolean;
+        tmpreg : tregister;
+        i : byte;
       begin
-        { TODO : a_cmp_reg_reg_label }
+        { swap parameters? }
+        case cmp_op of
+          OC_GT:
+            begin
+              swapped:=true;
+              cmp_op:=OC_LT;
+            end;
+          OC_LTE:
+            begin
+              swapped:=true;
+              cmp_op:=OC_GTE;
+            end;
+          OC_BE:
+            begin
+              swapped:=true;
+              cmp_op:=OC_AE;
+            end;
+          OC_A:
+            begin
+              swapped:=true;
+              cmp_op:=OC_A;
+            end;
+        end;
+        if swapped then
+          begin
+            tmpreg:=reg1;
+            reg1:=reg2;
+            reg2:=tmpreg;
+          end;
+        list.concat(taicpu.op_reg_reg(A_CP,reg1,reg2));
+
+        for i:=2 to tcgsize2size[size] do
+          begin
+            reg1:=GetNextReg(reg1);
+            reg2:=GetNextReg(reg2);
+            list.concat(taicpu.op_reg_reg(A_CPC,reg1,reg2));
+          end;
+
+        a_jmp_cond(list,cmp_op,l);
       end;