comparison gen_x86.c @ 125:dc5fc3adf705

Fix encoding of movsx instruction when used with new (i.e. r9-r15) registers. This fixes the indexed addressing modes when used with a word-wide index register
author Mike Pavone <pavone@retrodev.com>
date Sat, 29 Dec 2012 22:11:28 -0800
parents bd3858121ab0
children 5416a5c4628e
comparison
equal deleted inserted replaced
124:da95566514f3 125:dc5fc3adf705
960 *out = PRE_REX; 960 *out = PRE_REX;
961 if (size == SZ_Q) { 961 if (size == SZ_Q) {
962 *out |= REX_QUAD; 962 *out |= REX_QUAD;
963 } 963 }
964 if (src >= R8) { 964 if (src >= R8) {
965 *out |= REX_RM_FIELD;
966 src -= (R8 - X86_R8);
967 }
968 if (dst >= R8) {
965 *out |= REX_REG_FIELD; 969 *out |= REX_REG_FIELD;
966 src -= (R8 - X86_R8);
967 }
968 if (dst >= R8) {
969 *out |= REX_RM_FIELD;
970 dst -= (R8 - X86_R8); 970 dst -= (R8 - X86_R8);
971 } 971 }
972 out++; 972 out++;
973 } 973 }
974 if (src_size == SZ_D) { 974 if (src_size == SZ_D) {
990 *out = PRE_REX; 990 *out = PRE_REX;
991 if (size == SZ_Q) { 991 if (size == SZ_Q) {
992 *out |= REX_QUAD; 992 *out |= REX_QUAD;
993 } 993 }
994 if (src >= R8) { 994 if (src >= R8) {
995 *out |= REX_RM_FIELD;
996 src -= (R8 - X86_R8);
997 }
998 if (dst >= R8) {
995 *out |= REX_REG_FIELD; 999 *out |= REX_REG_FIELD;
996 src -= (R8 - X86_R8);
997 }
998 if (dst >= R8) {
999 *out |= REX_RM_FIELD;
1000 dst -= (R8 - X86_R8); 1000 dst -= (R8 - X86_R8);
1001 } 1001 }
1002 out++; 1002 out++;
1003 } 1003 }
1004 if (src_size == SZ_D) { 1004 if (src_size == SZ_D) {