aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]i386-gen.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/i386-gen.c b/i386-gen.c
index 5ea70df..f8795c1 100644..100755
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -686,10 +686,16 @@ ST_FUNC void gen_opi(int op)
vswap();
c = vtop->c.i;
if (c == (char)c) {
- /* XXX: generate inc and dec for smaller code ? */
- o(0x83);
- o(0xc0 | (opc << 3) | r);
- g(c);
+ /* generate inc and dec for smaller code */
+ if (c==1 && opc==0) {
+ o (0x40 | r); // inc
+ } else if (c==1 && opc==5) {
+ o (0x48 | r); // dec
+ } else {
+ o(0x83);
+ o(0xc0 | (opc << 3) | r);
+ g(c);
+ }
} else {
o(0x81);
oad(0xc0 | (opc << 3) | r, c);