summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-05-20 11:43:53 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-05-20 11:43:53 -0700
commitdfb918047b32e57b5cf4840021ccc0c03b4685f9 (patch)
treea12908c96f5a537ad140df909b621e17df0b1d45 /parser.c
parent70a13f5a3701faa71bd2b28390dff622d71c62a6 (diff)
downloadnasm-dfb918047b32e57b5cf4840021ccc0c03b4685f9.tar.gz
Add DY, YWORD, and the SY instruction flag
Add the DY instruction, YWORD keyword, and an SY marker for instruction sizes. Add a few more AVX sample instructions.
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;
}