1
0
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:
David Schmenk 2018-03-05 15:40:43 -08:00
parent f3ef1b4820
commit a8553cfdb7
7 changed files with 16 additions and 66 deletions

@ -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