summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/parser.c b/parser.c
index 9172fb1c..72e4e6c9 100644
--- a/parser.c
+++ b/parser.c
@@ -322,6 +322,7 @@ restart_parse:
if (result->opcode == I_RESB || result->opcode == I_RESW ||
result->opcode == I_RESD || result->opcode == I_RESQ ||
result->opcode == I_REST || result->opcode == I_RESO ||
+ result->opcode == I_RESY ||
result->opcode == I_EQU || result->opcode == I_INCBIN) {
critical = (pass0 < 2 ? 1 : 2);
@@ -331,7 +332,7 @@ restart_parse:
if (result->opcode == I_DB || result->opcode == I_DW ||
result->opcode == I_DD || result->opcode == I_DQ ||
result->opcode == I_DT || result->opcode == I_DO ||
- result->opcode == I_INCBIN) {
+ result->opcode == I_DY || result->opcode == I_INCBIN) {
extop *eop, **tail = &result->eops, **fixptr;
int oper_num = 0;
@@ -560,6 +561,11 @@ restart_parse:
result->oprs[operand].type |= BITS128;
setsize = 1;
break;
+ case S_YWORD:
+ if (!setsize)
+ result->oprs[operand].type |= BITS256;
+ setsize = 1;
+ break;
case S_TO:
result->oprs[operand].type |= TO;
break;
@@ -857,7 +863,7 @@ while (operand < MAX_OPERANDS)
result->oprs[operand++].type = 0;
/*
- * Transform RESW, RESD, RESQ, REST, RESO into RESB.
+ * Transform RESW, RESD, RESQ, REST, RESO, RESY into RESB.
*/
switch (result->opcode) {
case I_RESW:
@@ -880,6 +886,10 @@ while (operand < MAX_OPERANDS)
result->opcode = I_RESB;
result->oprs[0].offset *= 16;
break;
+ case I_RESY:
+ result->opcode = I_RESB;
+ result->oprs[0].offset *= 32;
+ break;
default:
break;
}