PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 1 ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE BREXPR OBJECT MODULE PLACED IN BREXPR.OBJ COMPILER INVOKED BY: :F0: BREXPR.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF $title ('BRACKET EXPRESSION') 1 brexpr: /* modified 4/13/81 R. Silberstein */ do; $include (:f1:macro.lit) = $nolist $include (:f1:brexpr.x86) = $nolist $include (:f1:ermod.ext) = $nolist $include (:f1:exglob.ext) = $nolist PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 2 $eject /* compute index expression within brackets */ 17 1 bracketexpr: proc(pt) byte public; 18 2 dcl pt address,oper based pt operandstruc, (firsttype,firstreg,lasttype,lastreg) byte, baseregi lit '0',indexregi lit'1'; 19 2 regtyp: proc(pt1,pt2) byte; 20 3 dcl (pt1,pt2) address,(typ based pt1,regi based pt2) byte; 21 3 if (token.type=reg) and (token.descr=wrd) then$do 23 4 typ=baseregi; 24 4 regi=token.value; 25 4 if (regi=rbp) or (regi=rbx) then return true; 27 4 typ=indexregi; 28 4 if (regi=rsi) or (regi=rdi) then return true; end$if; 31 3 return false; 32 3 end regtyp; 33 2 setoperflags: proc (pt1,pt2); 34 3 dcl (pt1,pt2) address,(typ based pt1,regi based pt2) byte; 35 3 if typ=indexregi then$do 37 4 oper.sflag=oper.sflag or iregbit; 38 4 IF REGI = RDI THEN OPER.BASEINDEX = OPER.BASEINDEX OR INDEXREGBIT; else$do 42 4 oper.sflag=oper.sflag or bregbit; 43 4 IF REGI = RBP THEN OPER.BASEINDEX = OPER.BASEINDEX OR BASEREGBIT; end$if; 46 3 end setoperflags; 47 2 if not regtyp(.firsttype,.firstreg) then return false; 49 2 call setoperflags(.firsttype,.firstreg); 50 2 call scan; 51 2 if specialtoken('+') then$do 53 3 call scan; 54 3 if not regtyp(.lasttype,.lastreg) then return false; 56 3 if firsttype=lasttype then return false; 58 3 call setoperflags(.lasttype,.lastreg); 59 3 call scan; 60 3 end$if; 61 2 if not specialtoken(rightbracket) then return false; 63 2 call scan; 64 2 if (oper.sflag and segmbit) = 0 then$do 66 3 if oper.stype=number then$do 68 4 oper.baseindex=oper.baseindex or nooverridebit; 69 4 end$if; end$if; 71 2 oper.stype=variable; 72 2 return true; 73 2 end bracketexpr; 74 1 end$module brexpr; PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 3 CROSS-REFERENCE LISTING ----------------------- DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ----- ------ ----- -------------------------------- 16 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(11) 16 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(12) 2 ADDR . . . . . . . LITERALLY 16 18 16 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS) 18 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPER) 39 44 68 7 BASEREGBIT . . . . LITERALLY 44 7 BASEREGCOUNT . . . LITERALLY 18 BASEREGI . . . . . LITERALLY 23 17 0000H 148 BRACKETEXPR. . . . PROCEDURE BYTE PUBLIC STACK=000AH 7 BREGBIT. . . . . . LITERALLY 42 7 BREGCOUNT. . . . . LITERALLY 1 0000H BREXPR . . . . . . PROCEDURE STACK=0000H 4 BYT. . . . . . . . LITERALLY 16 0000H 2 CIP. . . . . . . . WORD EXTERNAL(3) 3 CODE . . . . . . . LITERALLY 2 CR . . . . . . . . LITERALLY 16 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(6) 16 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(4) 16 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(5) 16 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(8) 2 DCL. . . . . . . . LITERALLY 3 DELETEDSYMB. . . . LITERALLY 16 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN) 21 3 DOUBLEDEFINED. . . LITERALLY 16 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(7) 4 DWRD . . . . . . . LITERALLY 2 ELSEDO . . . . . . LITERALLY 39 2 ENDCASE. . . . . . LITERALLY 2 ENDDO. . . . . . . LITERALLY 2 ENDFOREVER . . . . LITERALLY 2 ENDIF. . . . . . . LITERALLY 29 44 69 2 ENDMODULE. . . . . LITERALLY 2 ENDOFFILE. . . . . LITERALLY 2 ENDPROC. . . . . . LITERALLY 2 ENDWHILE . . . . . LITERALLY 13 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 13 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 14 2 FALSE. . . . . . . LITERALLY 31 48 55 57 62 18 0003H 1 FIRSTREG . . . . . BYTE 47 49 18 0002H 1 FIRSTTYPE. . . . . BYTE 47 49 56 2 FOREVER. . . . . . LITERALLY 2 FORMFEED . . . . . LITERALLY 3 IDENT. . . . . . . LITERALLY 7 INDEXREGBIT. . . . LITERALLY 39 7 INDEXREGCOUNT. . . LITERALLY 18 INDEXREGI. . . . . LITERALLY 27 35 2 INIT . . . . . . . LITERALLY 7 IREGBIT. . . . . . LITERALLY 37 7 IREGCOUNT. . . . . LITERALLY PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 4 3 LAB. . . . . . . . LITERALLY 18 0005H 1 LASTREG. . . . . . BYTE 54 58 18 0004H 1 LASTTYPE . . . . . BYTE 54 56 58 6 LEFTBRACKET. . . . LITERALLY 16 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS) 18 0000H 2 LENGTH . . . . . . WORD MEMBER(OPER) 2 LF . . . . . . . . LITERALLY 2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 18 3 NEGLECTED. . . . . LITERALLY 16 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(10) 4 NIL. . . . . . . . LITERALLY 16 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(13) 7 NOOVERCOUNT. . . . LITERALLY 7 NOOVERRIDEBIT. . . LITERALLY 68 3 NUMBER . . . . . . LITERALLY 66 6 OAND . . . . . . . LITERALLY 6 OEQ. . . . . . . . LITERALLY 16 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS) 18 0006H 2 OFFSET . . . . . . WORD MEMBER(OPER) 6 OGE. . . . . . . . LITERALLY 6 OGT. . . . . . . . LITERALLY 6 OLAST. . . . . . . LITERALLY 6 OLE. . . . . . . . LITERALLY 6 OLENGTH. . . . . . LITERALLY 6 OLT. . . . . . . . LITERALLY 6 OMOD . . . . . . . LITERALLY 6 ONE. . . . . . . . LITERALLY 6 ONOT . . . . . . . LITERALLY 6 OOFFSET. . . . . . LITERALLY 6 OOR. . . . . . . . LITERALLY 18 0000H 9 OPER . . . . . . . STRUCTURE BASED(PT) 37 39 42 44 64 66 68 71 16 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(14) 7 OPERANDSTRUC . . . LITERALLY 16 18 3 OPERATOR . . . . . LITERALLY 6 OPTR . . . . . . . LITERALLY 6 OSEG . . . . . . . LITERALLY 6 OSHL . . . . . . . LITERALLY 6 OSHORT . . . . . . LITERALLY 6 OSHR . . . . . . . LITERALLY 6 OTYPE. . . . . . . LITERALLY 6 OXOR . . . . . . . LITERALLY 2 PROC . . . . . . . LITERALLY 8 10 13 17 19 33 3 PSEUDO . . . . . . LITERALLY 17 0000H 2 PT . . . . . . . . WORD PARAMETER 18 37 39 42 44 64 66 68 71 19 0006H 2 PT1. . . . . . . . WORD PARAMETER AUTOMATIC 20 23 27 33 0006H 2 PT1. . . . . . . . WORD PARAMETER AUTOMATIC 34 35 33 0004H 2 PT2. . . . . . . . WORD PARAMETER AUTOMATIC 34 38 43 19 0004H 2 PT2. . . . . . . . WORD PARAMETER AUTOMATIC 20 24 25 28 5 RBP. . . . . . . . LITERALLY 25 43 5 RBX. . . . . . . . LITERALLY 25 5 RCS. . . . . . . . LITERALLY 5 RDI. . . . . . . . LITERALLY 28 38 5 RDS. . . . . . . . LITERALLY PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 5 2 REENT. . . . . . . LITERALLY 3 REG. . . . . . . . LITERALLY 21 20 0000H 1 REGI . . . . . . . BYTE BASED(PT2) 24 25 28 34 0000H 1 REGI . . . . . . . BYTE BASED(PT2) 38 43 19 0094H 73 REGTYP . . . . . . PROCEDURE BYTE STACK=0006H 47 54 5 RES. . . . . . . . LITERALLY 6 RIGHTBRACKET . . . LITERALLY 61 5 RSI. . . . . . . . LITERALLY 28 5 RSS. . . . . . . . LITERALLY 8 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 50 53 59 63 7 SEGMBIT. . . . . . LITERALLY 64 7 SEGMCOUNT. . . . . LITERALLY 18 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPER) 16 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS) 7 SEGTYPEBIT . . . . LITERALLY 7 SEGTYPECOUNT . . . LITERALLY 33 00DDH 65 SETOPERFLAGS . . . PROCEDURE STACK=0006H 49 58 18 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPER) 37 42 64 16 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS) 2 SPACE. . . . . . . LITERALLY 3 SPEC . . . . . . . LITERALLY 10 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 51 61 3 STRING . . . . . . LITERALLY 2 STRUC. . . . . . . LITERALLY 16 18 18 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPER) 66 71 16 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS) 3 SYMBOL . . . . . . LITERALLY 2 TAB. . . . . . . . LITERALLY 2 THENDO . . . . . . LITERALLY 21 35 51 64 66 10 0000H 1 TOK. . . . . . . . BYTE PARAMETER 11 16 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(9) 21 24 2 TRUE . . . . . . . LITERALLY 26 29 72 34 0000H 1 TYP. . . . . . . . BYTE BASED(PT1) 35 20 0000H 1 TYP. . . . . . . . BYTE BASED(PT1) 23 27 16 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN) 21 7 TYPEBIT. . . . . . LITERALLY 7 TYPECOUNT. . . . . LITERALLY 3 UDEFSYMB . . . . . LITERALLY 16 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN) 24 3 VARIABLE . . . . . LITERALLY 71 4 WRD. . . . . . . . LITERALLY 21 MODULE INFORMATION: CODE AREA SIZE = 011EH 286D CONSTANT AREA SIZE = 0000H 0D VARIABLE AREA SIZE = 0006H 6D MAXIMUM STACK SIZE = 000AH 10D 254 LINES READ 0 PROGRAM ERROR(S) END OF PL/M-86 COMPILATION