cpu.x86: use INC and DEC in favor of ADD reg, 1 and SUB reg, 1
The encoding for INC reg and DEC reg is one byte shorter so using it shaves of a few bytes from the generated code.locals-and-roots
parent
5a2e1c953e
commit
274a0174fd
|
@ -1,8 +1,8 @@
|
||||||
USING: compiler.cfg.debugger compiler.cfg.instructions
|
USING: compiler.cfg.debugger compiler.cfg.instructions
|
||||||
compiler.cfg.registers compiler.codegen.gc-maps
|
compiler.cfg.registers compiler.codegen.gc-maps
|
||||||
compiler.codegen.relocation cpu.architecture cpu.x86 cpu.x86.assembler
|
compiler.codegen.relocation cpu.architecture cpu.x86 cpu.x86.assembler
|
||||||
cpu.x86.features kernel kernel.private layouts make math math.libm
|
cpu.x86.assembler.operands cpu.x86.features kernel kernel.private
|
||||||
namespaces sequences system tools.test ;
|
layouts make math math.libm namespaces sequences system tools.test ;
|
||||||
IN: cpu.x86.tests
|
IN: cpu.x86.tests
|
||||||
|
|
||||||
{ } [
|
{ } [
|
||||||
|
@ -12,6 +12,15 @@ IN: cpu.x86.tests
|
||||||
assert=
|
assert=
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! %add-imm
|
||||||
|
{
|
||||||
|
B{ 72 255 192 }
|
||||||
|
B{ 72 131 192 29 }
|
||||||
|
} [
|
||||||
|
[ RAX RAX 1 %add-imm ] B{ } make
|
||||||
|
[ RAX RAX 29 %add-imm ] B{ } make
|
||||||
|
] unit-test
|
||||||
|
|
||||||
! %call-gc
|
! %call-gc
|
||||||
{ V{ } } [
|
{ V{ } } [
|
||||||
init-relocation init-gc-maps
|
init-relocation init-gc-maps
|
||||||
|
|
|
@ -130,9 +130,17 @@ M: x86 %set-slot-imm ( src obj slot tag -- ) (%slot-imm) swap MOV ;
|
||||||
dst ; inline
|
dst ; inline
|
||||||
|
|
||||||
M: x86 %add 2over eq? [ nip ADD ] [ [+] LEA ] if ;
|
M: x86 %add 2over eq? [ nip ADD ] [ [+] LEA ] if ;
|
||||||
M: x86 %add-imm 2over eq? [ nip ADD ] [ [+] LEA ] if ;
|
M: x86 %add-imm ( dst src1 src2 -- )
|
||||||
|
2over eq? [
|
||||||
|
nip { { 1 [ INC ] } { -1 [ DEC ] } [ ADD ] } case
|
||||||
|
] [ [+] LEA ] if ;
|
||||||
|
|
||||||
M: x86 %sub int-rep two-operand SUB ;
|
M: x86 %sub int-rep two-operand SUB ;
|
||||||
M: x86 %sub-imm 2over eq? [ nip SUB ] [ neg [+] LEA ] if ;
|
M: x86 %sub-imm ( dst src1 src2 -- )
|
||||||
|
2over eq? [
|
||||||
|
nip { { 1 [ DEC ] } { -1 [ INC ] } [ SUB ] } case
|
||||||
|
] [ neg [+] LEA ] if ;
|
||||||
|
|
||||||
M: x86 %mul int-rep two-operand IMUL2 ;
|
M: x86 %mul int-rep two-operand IMUL2 ;
|
||||||
M: x86 %mul-imm IMUL3 ;
|
M: x86 %mul-imm IMUL3 ;
|
||||||
M: x86 %and int-rep two-operand AND ;
|
M: x86 %and int-rep two-operand AND ;
|
||||||
|
|
Loading…
Reference in New Issue