mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-20 18:31:13 +00:00
re-arrange some ops
This commit is contained in:
parent
f3ef1b4820
commit
a8553cfdb7
src
@ -601,7 +601,7 @@ void emit_const(int cval)
|
||||
{
|
||||
emit_pending_seq();
|
||||
if ((cval & 0xFFFF) == 0xFFFF)
|
||||
printf("\t%s\t$80\t\t\t; MINUS ONE\n", DB);
|
||||
printf("\t%s\t$20\t\t\t; MINUS ONE\n", DB);
|
||||
else if ((cval & 0xFFF0) == 0x0000)
|
||||
printf("\t%s\t$%02X\t\t\t; CN\t%d\n", DB, cval*2, cval);
|
||||
else if ((cval & 0xFF00) == 0x0000)
|
||||
@ -926,7 +926,7 @@ int emit_unaryop(t_token op)
|
||||
printf("\t%s\t$92\t\t\t; COMP\n", DB);
|
||||
break;
|
||||
case LOGIC_NOT_TOKEN:
|
||||
printf("\t%s\t$20\t\t\t; NOT\n", DB);
|
||||
printf("\t%s\t$80\t\t\t; NOT\n", DB);
|
||||
break;
|
||||
case INC_TOKEN:
|
||||
printf("\t%s\t$8C\t\t\t; INCR\n", DB);
|
||||
@ -999,12 +999,6 @@ int emit_op(t_token op)
|
||||
case LE_TOKEN:
|
||||
printf("\t%s\t$4A\t\t\t; ISLE\n", DB);
|
||||
break;
|
||||
// case LOGIC_OR_TOKEN:
|
||||
// printf("\t%s\t$22\t\t\t; LOR\n", DB);
|
||||
// break;
|
||||
// case LOGIC_AND_TOKEN:
|
||||
// printf("\t%s\t$24\t\t\t; LAND\n", DB);
|
||||
// break;
|
||||
case COMMA_TOKEN:
|
||||
break;
|
||||
default:
|
||||
@ -1276,14 +1270,6 @@ int crunch_seq(t_opseq **seq, int pass)
|
||||
op->val = op->val <= opnext->val ? 1 : 0;
|
||||
freeops = 2;
|
||||
break;
|
||||
// case BINARY_CODE(LOGIC_OR_TOKEN):
|
||||
// op->val = op->val || opnext->val ? 1 : 0;
|
||||
// freeops = 2;
|
||||
// break;
|
||||
// case BINARY_CODE(LOGIC_AND_TOKEN):
|
||||
// op->val = op->val && opnext->val ? 1 : 0;
|
||||
// freeops = 2;
|
||||
// break;
|
||||
}
|
||||
// End of collapse constant operation
|
||||
if ((pass > 0) && (freeops == 0) && (op->val != 0))
|
||||
@ -1674,8 +1660,6 @@ int emit_pending_seq()
|
||||
case LT_CODE:
|
||||
case GT_CODE:
|
||||
case LE_CODE:
|
||||
// case LOGIC_OR_CODE:
|
||||
// case LOGIC_AND_CODE:
|
||||
emit_op(op->code);
|
||||
break;
|
||||
case CONST_CODE:
|
||||
|
@ -31,8 +31,6 @@ typedef struct _opseq {
|
||||
#define LT_CODE (0x0200|LT_TOKEN)
|
||||
#define GT_CODE (0x0200|GT_TOKEN)
|
||||
#define LE_CODE (0x0200|LE_TOKEN)
|
||||
//#define LOGIC_OR_CODE (0x0200|LOGIC_OR_TOKEN)
|
||||
//#define LOGIC_AND_CODE (0x0200|LOGIC_AND_TOKEN)
|
||||
#define CONST_CODE 0x0300
|
||||
#define STR_CODE 0x0301
|
||||
#define LB_CODE 0x0302
|
||||
|
@ -133,7 +133,7 @@ end
|
||||
def emit_const(cval)#0
|
||||
emit_pending_seq
|
||||
if cval == $FFFF // MINUS ONE
|
||||
emit_byte($80)
|
||||
emit_byte($20)
|
||||
elsif cval & $FFF0 == $0000 // Constant NYBBLE
|
||||
emit_byte(cval*2)
|
||||
elsif cval & $FF00 == $0000 // Constant BYTE
|
||||
@ -308,8 +308,11 @@ def emit_pending_seq#0
|
||||
//
|
||||
is CONST_GROUP
|
||||
if op->opcode == CONST_CODE
|
||||
if op=>opval == $0000 // ZERO
|
||||
^codeptr = $00
|
||||
if op=>opval == $FFFF // MINUS 1
|
||||
^codeptr = $20
|
||||
codeptr++
|
||||
elsif op=>opval & $FFF0 == $0000 // Constant NYBBLE
|
||||
^codeptr = op->opval*2)
|
||||
codeptr++
|
||||
elsif op=>opval & $FF00 == $0000 // Constant BYTE
|
||||
*codeptr = $2A | (op->opval << 8)
|
||||
@ -739,7 +742,7 @@ def gen_uop(seq, tkn)
|
||||
is COMP_TKN
|
||||
code = $92; break
|
||||
is LOGIC_NOT_TKN
|
||||
code = $20; break
|
||||
code = $80; break
|
||||
is INC_TKN
|
||||
code = $8C; break
|
||||
is DEC_TKN
|
||||
|
@ -29,9 +29,7 @@ const EOR_CODE = $98
|
||||
const SHL_CODE = $9A
|
||||
const SHR_CODE = $9C
|
||||
const INDEXW_CODE = $9E
|
||||
const LOGIC_NOT_CODE = $20
|
||||
//const LOGIC_OR_CODE = $22
|
||||
//const LOGIC_AND_CODE = $24
|
||||
const LOGIC_NOT_CODE = $80
|
||||
const DROP_CODE = $30
|
||||
const DROP2_CODE = $32
|
||||
const DUP_CODE = $34
|
||||
|
@ -24,9 +24,7 @@ t_token binary_ops_table[] = {
|
||||
EOR_TOKEN,
|
||||
OR_TOKEN,
|
||||
GT_TOKEN, GE_TOKEN, LT_TOKEN, LE_TOKEN,
|
||||
EQ_TOKEN, NE_TOKEN,
|
||||
// LOGIC_AND_TOKEN,
|
||||
// LOGIC_OR_TOKEN
|
||||
EQ_TOKEN, NE_TOKEN
|
||||
/* Lowest precedence */
|
||||
};
|
||||
t_token binary_ops_precedence[] = {
|
||||
@ -38,9 +36,7 @@ t_token binary_ops_precedence[] = {
|
||||
5,
|
||||
6,
|
||||
7, 7, 7, 7,
|
||||
8, 8,
|
||||
// 9,
|
||||
// 10
|
||||
8, 8
|
||||
/* Lowest precedence */
|
||||
};
|
||||
|
||||
|
@ -194,8 +194,6 @@ byte = EOR_TKN
|
||||
byte = OR_TKN
|
||||
byte = GT_TKN, GE_TKN, LT_TKN, LE_TKN
|
||||
byte = EQ_TKN, NE_TKN
|
||||
//byte = LOGIC_AND_TKN
|
||||
//byte = LOGIC_OR_TKN
|
||||
// Lowest precedence
|
||||
byte[] bops_prec // Highest precedence
|
||||
byte = 1, 1, 1
|
||||
@ -206,8 +204,6 @@ byte = 5
|
||||
byte = 6
|
||||
byte = 7, 7, 7, 7
|
||||
byte = 8, 8
|
||||
//byte = 9
|
||||
//byte = 10
|
||||
// Lowest precedence
|
||||
byte[16] opstack
|
||||
byte[16] precstack
|
||||
|
@ -195,13 +195,13 @@ VMCORE = *
|
||||
!ALIGN 255,0
|
||||
OPTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02 04 06 08 0A 0C 0E
|
||||
!WORD CN,CN,CN,CN,CN,CN,CN,CN ; 10 12 14 16 18 1A 1C 1E
|
||||
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD MINUS1,NEXTOP,NEXTOP,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD DROP,DROP2,DUP,DIVMOD,ADDI,SUBI,ANDI,ORI ; 30 32 34 36 38 3A 3C 3E
|
||||
!WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
|
||||
!WORD BRNCH,SEL,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E
|
||||
!WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
|
||||
!WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E
|
||||
!WORD MINUS1,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
;*
|
||||
@ -406,13 +406,13 @@ LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY
|
||||
!ALIGN 255,0
|
||||
OPXTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02 04 06 08 0A 0C 0E
|
||||
!WORD CN,CN,CN,CN,CN,CN,CN,CN ; 10 12 14 16 18 1A 1C 1E
|
||||
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD MINUS1,NEXTOP,NEXTOP,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD DROP,DROP2,DUP,DIVMOD,ADDI,SUBI,ANDI,ORI ; 30 32 34 36 38 3A 3C 3E
|
||||
!WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
|
||||
!WORD BRNCH,SEL,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E
|
||||
!WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
|
||||
!WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E
|
||||
!WORD MINUS1,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
;*
|
||||
@ -686,31 +686,6 @@ SHR STY IPY
|
||||
+ LDY IPY
|
||||
JMP DROP
|
||||
;*
|
||||
;* LOGICAL AND
|
||||
;*
|
||||
LAND LDA ESTKL+1,X
|
||||
ORA ESTKH+1,X
|
||||
BEQ ++
|
||||
LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$FF
|
||||
+ STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
++ JMP DROP
|
||||
;*
|
||||
;* LOGICAL OR
|
||||
;*
|
||||
LOR LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
ORA ESTKL+1,X
|
||||
ORA ESTKH+1,X
|
||||
BEQ +
|
||||
LDA #$FF
|
||||
STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
+ JMP DROP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
|
Loading…
x
Reference in New Issue
Block a user