diff options
| author | Charles Forsyth <charles.forsyth@gmail.com> | 2013-06-04 08:30:04 +0000 |
|---|---|---|
| committer | Charles Forsyth <charles.forsyth@gmail.com> | 2013-06-04 08:30:04 +0000 |
| commit | 4a4256626644b5e413cfb1c228d396d27364030b (patch) | |
| tree | 5106c854262a2b88b4c56c9bbbefbf237cb17279 /libinterp/comp-386.c | |
| parent | 6fd2624083b72690a3c4d9f61f5c51a61d0f2b00 (diff) | |
adjust code to size of Runes
Diffstat (limited to 'libinterp/comp-386.c')
| -rw-r--r-- | libinterp/comp-386.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/libinterp/comp-386.c b/libinterp/comp-386.c index 916e3c34..21a12718 100644 --- a/libinterp/comp-386.c +++ b/libinterp/comp-386.c @@ -1406,13 +1406,18 @@ comp(Inst *i) genb(0x0f); gen2(Omovzxb, (1<<6)|(0<<3)|4); gen2((0<<6)|(RBX<<3)|RAX, O(String, data)); - gen2(Ojmpb, 11); + gen2(Ojmpb, sizeof(Rune)==4? 10: 11); gen2(Oneg, (3<<6)|(3<<3)|RTA); gen2(0x3b, (3<<6)|(RBX<<3)|RTA); /* cmp index, len */ gen2(0x73, 0xee); /* JNB */ - genb(0x0f); - gen2(Omovzxw, (1<<6)|(0<<3)|4); - gen2((1<<6)|(RBX<<3)|RAX, O(String, data)); + if(sizeof(Rune) == 4){ + gen2(Oldw, (1<<6)|(0<<3)|4); + gen2((2<<6)|(RBX<<3)|RAX, O(String, data)); + }else{ + genb(0x0f); + gen2(Omovzxw, (1<<6)|(0<<3)|4); + gen2((1<<6)|(RBX<<3)|RAX, O(String, data)); + } opwst(i, Ostw, RAX); break; } @@ -1422,10 +1427,16 @@ comp(Inst *i) genb(0x0f); gen2(Omovzxb, (1<<6)|(0<<3)|4); /* movzbx 12(AX)(RBX*1), RAX */ gen2((0<<6)|(RBX<<3)|RAX, O(String, data)); - gen2(Ojmpb, 5); - genb(0x0f); - gen2(Omovzxw, (1<<6)|(0<<3)|4); /* movzwx 12(AX)(RBX*2), RAX */ - gen2((1<<6)|(RBX<<3)|RAX, O(String, data)); + if(sizeof(Rune) == 4){ + gen2(Ojmpb, 4); + gen2(Oldw, (1<<6)|(0<<3)|4); /* movl 12(AX)(RBX*4), RAX */ + gen2((2<<6)|(RBX<<3)|RAX, O(String, data)); + }else{ + gen2(Ojmpb, 5); + genb(0x0f); + gen2(Omovzxw, (1<<6)|(0<<3)|4); /* movzwx 12(AX)(RBX*2), RAX */ + gen2((1<<6)|(RBX<<3)|RAX, O(String, data)); + } opwst(i, Ostw, RAX); break; case ICASE: |
