Browse Source

* reduce register pressure by allocating/deallocating registers as late/early as possible

git-svn-id: trunk@24581 -
florian 12 years ago
parent
commit
c1a1325a72
1 changed files with 4 additions and 4 deletions
  1. 4 4
      compiler/i8086/cgcpu.pas

+ 4 - 4
compiler/i8086/cgcpu.pas

@@ -997,13 +997,13 @@ unit cgcpu;
                   OS_S8:
                   OS_S8:
                     begin
                     begin
                       getcpuregister(list, NR_AX);
                       getcpuregister(list, NR_AX);
-                      getcpuregister(list, NR_DX);
                       add_mov(taicpu.op_reg_reg(A_MOV, S_B, reg1, NR_AL));
                       add_mov(taicpu.op_reg_reg(A_MOV, S_B, reg1, NR_AL));
+                      getcpuregister(list, NR_DX);
                       list.concat(taicpu.op_none(A_CBW));
                       list.concat(taicpu.op_none(A_CBW));
                       list.concat(taicpu.op_none(A_CWD));
                       list.concat(taicpu.op_none(A_CWD));
                       add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_AX, reg2));
                       add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_AX, reg2));
-                      add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_DX, GetNextReg(reg2)));
                       ungetcpuregister(list, NR_AX);
                       ungetcpuregister(list, NR_AX);
+                      add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_DX, GetNextReg(reg2)));
                       ungetcpuregister(list, NR_DX);
                       ungetcpuregister(list, NR_DX);
                     end;
                     end;
                   OS_16:
                   OS_16:
@@ -1014,12 +1014,12 @@ unit cgcpu;
                   OS_S16:
                   OS_S16:
                     begin
                     begin
                       getcpuregister(list, NR_AX);
                       getcpuregister(list, NR_AX);
-                      getcpuregister(list, NR_DX);
                       add_mov(taicpu.op_reg_reg(A_MOV, S_W, reg1, NR_AX));
                       add_mov(taicpu.op_reg_reg(A_MOV, S_W, reg1, NR_AX));
+                      getcpuregister(list, NR_DX);
                       list.concat(taicpu.op_none(A_CWD));
                       list.concat(taicpu.op_none(A_CWD));
                       add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_AX, reg2));
                       add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_AX, reg2));
-                      add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_DX, GetNextReg(reg2)));
                       ungetcpuregister(list, NR_AX);
                       ungetcpuregister(list, NR_AX);
+                      add_mov(taicpu.op_reg_reg(A_MOV, S_W, NR_DX, GetNextReg(reg2)));
                       ungetcpuregister(list, NR_DX);
                       ungetcpuregister(list, NR_DX);
                     end;
                     end;
                   OS_32,OS_S32:
                   OS_32,OS_S32: