Mercurial > repos > blastem
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) { |