Skip to content

Commit

Permalink
Merge commutative and non-commutative (LONG_NEG) long emits. Introduc…
Browse files Browse the repository at this point in the history
…e LONG_SUB memops and peephole optimizations.
  • Loading branch information
Ian Rogers committed Jun 30, 2009
1 parent 00054ba commit 35c5b0b
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 259 deletions.
28 changes: 14 additions & 14 deletions rvm/src-generated/opt-burs/ia32/IA32-LongAdd-32.rules
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,36 @@
r: LONG_ADD(r, rlv)
26
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)));
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)), true);

### Memory operands ###
r: LONG_ADD(rlv, load64)
r: LONG_ADD(r, load64)
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO());
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO(), true);

r: LONG_ADD(load64, rlv)
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO());
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO(), true);

stm: LONG_STORE(LONG_ADD(LONG_LOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLL(p), 30)
ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)));
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)), true);

stm: LONG_STORE(LONG_ADD(rlv,LONG_LOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLR(p), 17)
stm: LONG_STORE(LONG_ADD(r,LONG_LOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)));
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)), true);

stm: LONG_ASTORE(LONG_ADD(LONG_ALOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)));
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)), true);

stm: LONG_ASTORE(LONG_ADD(rlv,LONG_ALOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 17)
stm: LONG_ASTORE(LONG_ADD(r,LONG_ALOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_ADD, IA32_ADC, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)));
EMIT_LongBinary(IA32_ADD, IA32_ADC, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)), true);

30 changes: 15 additions & 15 deletions rvm/src-generated/opt-burs/ia32/IA32-LongAnd-32.rules
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,38 @@
# LONG_AND
#####
r: LONG_AND(r, rlv)
13
26
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)));
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)), true);

### Memory operands ###
r: LONG_AND(rlv, load64)
15
r: LONG_AND(r, load64)
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO());
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO(), true);

r: LONG_AND(load64, rlv)
15
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO());
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO(), true);

stm: LONG_STORE(LONG_AND(LONG_LOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLL(p), 17)
ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)) );
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)), true);

stm: LONG_STORE(LONG_AND(r,LONG_LOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLR(p), 17)
ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)) );
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)), true);

stm: LONG_ASTORE(LONG_AND(LONG_ALOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)) );
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)), true);

stm: LONG_ASTORE(LONG_AND(r,LONG_ALOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_AND, IA32_AND, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)) );
EMIT_LongBinary(IA32_AND, IA32_AND, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)), true);

2 changes: 1 addition & 1 deletion rvm/src-generated/opt-burs/ia32/IA32-LongNeg-32.rules
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# LONG_NEG
#####
r: LONG_NEG(r)
23
26
EMIT_INSTRUCTION
EMIT_LongUnary(P(p), Unary.getResult(P(p)), Unary.getVal(P(p)), true);

Expand Down
28 changes: 14 additions & 14 deletions rvm/src-generated/opt-burs/ia32/IA32-LongOr-32.rules
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,38 @@
# LONG_OR
#####
r: LONG_OR(r, rlv)
13
26
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)));
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)), true);

### Memory operands ###
r: LONG_OR(r, load64)
15
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO());
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO(), true);

r: LONG_OR(load64, rlv)
15
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO());
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO(), true);

stm: LONG_STORE(LONG_OR(LONG_LOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLL(p), 17)
ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)) );
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)), true);

stm: LONG_STORE(LONG_OR(r,LONG_LOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLR(p), 17)
ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)) );
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)), true);

stm: LONG_ASTORE(LONG_OR(LONG_ALOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)) );
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)), true);

stm: LONG_ASTORE(LONG_OR(r,LONG_ALOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_OR, IA32_OR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)) );
EMIT_LongBinary(IA32_OR, IA32_OR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)), true);

23 changes: 22 additions & 1 deletion rvm/src-generated/opt-burs/ia32/IA32-LongSub-32.rules
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,26 @@
r: LONG_SUB(rlv, rlv)
23
EMIT_INSTRUCTION
LONG_SUB(P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)));
EMIT_LongBinary(IA32_SUB, IA32_SBB, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)), false);

### Memory operands ###
r: LONG_SUB(rlv, load64)
30
EMIT_INSTRUCTION
EMIT_LongBinary(IA32_SUB, IA32_SBB, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO(), false);

r: LONG_SUB(load64, rlv)
30
EMIT_INSTRUCTION
EMIT_LongBinary(IA32_SUB, IA32_SBB, P(p), Binary.getResult(P(p)), consumeMO(), Binary.getVal2(P(p)), false);

stm: LONG_STORE(LONG_SUB(LONG_LOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongBinary(IA32_SUB, IA32_SBB, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)), false);

stm: LONG_ASTORE(LONG_SUB(LONG_ALOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongBinary(IA32_SUB, IA32_SBB, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)), false);

28 changes: 14 additions & 14 deletions rvm/src-generated/opt-burs/ia32/IA32-LongXor-32.rules
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,38 @@
# LONG_XOR
#####
r: LONG_XOR(r, rlv)
13
26
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)));
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), Binary.getVal2(P(p)), true);

### Memory operands ###
r: LONG_XOR(r, load64)
15
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO());
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), Binary.getResult(P(p)), Binary.getVal1(P(p)), consumeMO(), true);

r: LONG_XOR(load64, rlv)
15
30
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO());
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), Binary.getResult(P(p)), Binary.getVal2(P(p)), consumeMO(), true);

stm: LONG_STORE(LONG_XOR(LONG_LOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLL(p), 17)
ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)) );
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal2(PL(p)), true);

stm: LONG_STORE(LONG_XOR(r,LONG_LOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ADDRESS_EQUAL(P(p), PLR(p), 17)
ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)) );
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), MO_S(P(p), QW), MO_S(P(p), QW), Binary.getVal1(PL(p)), true);

stm: LONG_ASTORE(LONG_XOR(LONG_ALOAD(rlv,rlv),rlv),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLL(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)) );
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal2(PL(p)), true);

stm: LONG_ASTORE(LONG_XOR(r,LONG_ALOAD(rlv,rlv)),OTHER_OPERAND(rlv, rlv))
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 17)
ARRAY_ADDRESS_EQUAL(P(p), PLR(p), 34)
EMIT_INSTRUCTION
EMIT_LongCommutative(IA32_XOR, IA32_XOR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)) );
EMIT_LongBinary(IA32_XOR, IA32_XOR, P(p), MO_AS(P(p), QW_S, QW), MO_AS(P(p), QW_S, QW), Binary.getVal1(PL(p)), true);

Loading

0 comments on commit 35c5b0b

Please sign in to comment.