From a8553cfdb71bc5cf456b68fc61995a48a1bbaa8a Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 5 Mar 2018 15:40:43 -0800 Subject: [PATCH] re-arrange some ops --- src/toolsrc/codegen.c | 20 ++------------------ src/toolsrc/codegen.h | 2 -- src/toolsrc/codegen.pla | 11 +++++++---- src/toolsrc/codeseq.plh | 4 +--- src/toolsrc/parse.c | 8 ++------ src/toolsrc/plasm.pla | 4 ---- src/vmsrc/apple/plvm02.s | 33 ++++----------------------------- 7 files changed, 16 insertions(+), 66 deletions(-) diff --git a/src/toolsrc/codegen.c b/src/toolsrc/codegen.c index dc8df89..ce18984 100755 --- a/src/toolsrc/codegen.c +++ b/src/toolsrc/codegen.c @@ -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: diff --git a/src/toolsrc/codegen.h b/src/toolsrc/codegen.h index 32b3dca..af7d4af 100755 --- a/src/toolsrc/codegen.h +++ b/src/toolsrc/codegen.h @@ -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 diff --git a/src/toolsrc/codegen.pla b/src/toolsrc/codegen.pla index 136b5c3..5a7880b 100644 --- a/src/toolsrc/codegen.pla +++ b/src/toolsrc/codegen.pla @@ -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 diff --git a/src/toolsrc/codeseq.plh b/src/toolsrc/codeseq.plh index a65f621..5a23e6c 100644 --- a/src/toolsrc/codeseq.plh +++ b/src/toolsrc/codeseq.plh @@ -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 diff --git a/src/toolsrc/parse.c b/src/toolsrc/parse.c index edd75c8..97305d3 100755 --- a/src/toolsrc/parse.c +++ b/src/toolsrc/parse.c @@ -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 */ }; diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index 92a5b9f..7b44939 100644 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -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 diff --git a/src/vmsrc/apple/plvm02.s b/src/vmsrc/apple/plvm02.s index 78c165b..f2684b8 100755 --- a/src/vmsrc/apple/plvm02.s +++ b/src/vmsrc/apple/plvm02.s @@ -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