aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorandrewchambers <[email protected]>2021-10-20 11:05:12 +1300
committerGitHub <[email protected]>2021-10-20 11:05:12 +1300
commit8864d9ff2ceb956fe7ac34b4934ef7c8e40573f1 (patch)
tree9f1ee66b217ba71e04d5ee4c4800e13addfbe629 /main.c
parentaf5b8e24c7c5a3db4ba4a9718375b95db57a1a25 (diff)
parent936dd9a97e454747f8783fda8f1ee0c13d3f991d (diff)
Merge pull request #7 from michaelforney/small-encodings
Use smaller encodings in a few more cases.
Diffstat (limited to 'main.c')
-rw-r--r--main.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/main.c b/main.c
index ce1caa0..978669c 100644
--- a/main.c
+++ b/main.c
@@ -395,14 +395,12 @@ assemblemem(const Memarg* memarg, Rex rex, VarBytes prefix, VarBytes opcode,
/* Case when we don't need sib */
if (memarg->index == ASM_NO_REG && memarg->scale == 0 && ((rm & 7) != 4)) {
- if (memarg->disp.l == 0 && memarg->disp.c == 0) {
- if ((rm & 7) == 5) {
- mod = 1;
- } else {
- mod = 0;
- }
- } else {
+ if (memarg->disp.l != NULL || memarg->disp.c > INT8_MAX || memarg->disp.c < INT8_MIN) {
mod = 2;
+ } else if (memarg->disp.c != 0 || (rm & 7) == 5) {
+ mod = 1;
+ } else {
+ mod = 0;
}
assemblevbytes(prefix);
@@ -505,7 +503,7 @@ assemblejmp(const Jmp* j)
} else {
distance = target->wco - cursection->hdr.sh_size;
}
- if ((distance - 1) >= -128 && (distance - 1) <= 127) {
+ if ((distance - 1) >= -128 && (distance - 5) <= 127) {
jmpsize = 1;
} else {
jmpsize = 4;