Added .asize and .isize pseudo variables
These pseudo variables will return the size of the accumulator/index in bits. For the 65816 instruction set .ASIZE/.ISIZE will return either 8 or 16, depending on the current size of the operand in immediate addressing mode. For all other CPU instruction sets, .ASIZE/.ISIZE will always return 8. For example: ; Reverse Subtract with Accumulator ; A = memory - A .macro rsb param .if .asize = 8 eor #$ff .else eor #$ffff .endif sec adc param .endmacro
This commit is contained in:
@@ -1099,6 +1099,15 @@ static ExprNode* Factor (void)
|
||||
N = Function (FuncAddrSize);
|
||||
break;
|
||||
|
||||
case TOK_ASIZE:
|
||||
if (GetCPU() != CPU_65816) {
|
||||
N = GenLiteralExpr (8);
|
||||
} else {
|
||||
N = GenLiteralExpr (ExtBytes [AM65I_IMM_ACCU] * 8);
|
||||
}
|
||||
NextTok ();
|
||||
break;
|
||||
|
||||
case TOK_BLANK:
|
||||
N = Function (FuncBlank);
|
||||
break;
|
||||
@@ -1132,6 +1141,15 @@ static ExprNode* Factor (void)
|
||||
N = Function (FuncIsMnemonic);
|
||||
break;
|
||||
|
||||
case TOK_ISIZE:
|
||||
if (GetCPU() != CPU_65816) {
|
||||
N = GenLiteralExpr (8);
|
||||
} else {
|
||||
N = GenLiteralExpr (ExtBytes [AM65I_IMM_INDEX] * 8);
|
||||
}
|
||||
NextTok ();
|
||||
break;
|
||||
|
||||
case TOK_LOBYTE:
|
||||
N = Function (FuncLoByte);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user