diff --git a/DistrAction b/DistrAction deleted file mode 100755 index 90295286b..000000000 --- a/DistrAction +++ /dev/null @@ -1,3 +0,0 @@ -p=/proj/em/Work -sh TakeAction 'make distr' $p/distr/Action -sh TakeAction 'make distr' $p/distr/Action1 diff --git a/Makefile b/Makefile deleted file mode 100644 index bf4572b29..000000000 --- a/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -cmp: # compile everything and compare - (cd etc ; make cmp ) - (cd util ; make cmp ) - (cd lang ; make cmp ) - (cd mach ; make cmp ) - -install: # compile everything to machine code - (cd etc ; make install ) - (cd util ; make install ) - (cd lang/cem ; make install ) - (cd mach ; make install ) - (cd lang/pc ; make install ) - -clean: # remove all non-sources, except boot-files - (cd doc ; make clean ) - (cd man ; make clean ) - (cd h ; make clean ) - (cd etc ; make clean ) - (cd util ; make clean ) - (cd lang ; make clean ) - (cd mach ; make clean ) - -opr: # print all sources - make pr | opr - -pr: # print all sources - @( pr Makefile ; \ - (cd doc ; make pr ) ; \ - (cd man ; make pr ) ; \ - (cd h ; make pr ) ; \ - (cd etc ; make pr ) ; \ - (cd lang ; make pr ) ; \ - (cd util ; make pr ) ; \ - (cd mach ; make pr ) \ - ) diff --git a/bin/em.pascal b/bin/em.pascal deleted file mode 100755 index 2e03475b9..000000000 --- a/bin/em.pascal +++ /dev/null @@ -1 +0,0 @@ -exec /usr/em/doc/em/int/em /usr/em/doc/em/int/tables ${1-e.out} core diff --git a/distr/Action b/distr/Action deleted file mode 100644 index 1cbc5442c..000000000 --- a/distr/Action +++ /dev/null @@ -1,3 +0,0 @@ -name "EM tables" -dir etc -end diff --git a/distr/Action1 b/distr/Action1 deleted file mode 100644 index dc1e371f9..000000000 --- a/distr/Action1 +++ /dev/null @@ -1,16 +0,0 @@ -name "m68k2/cg bootstrap files" -dir mach/m68k2/cg -action "make EMHOME=/proj/em/Work distr" -end -name "vax4/cg bootstrap files" -dir mach/vax4/cg -action "make EMHOME=/proj/em/Work distr" -end -name "m68020/ncg bootstrap files" -dir mach/m68020/ncg -action "make EMHOME=/proj/em/Work distr" -end -name "m68k4/cg bootstrap files" -dir mach/m68k4/cg -action "make EMHOME=/proj/em/Work distr" -end diff --git a/distr/f.attf b/distr/f.attf deleted file mode 100644 index a95572a51..000000000 --- a/distr/f.attf +++ /dev/null @@ -1,26 +0,0 @@ --- ./doc/install.pr no RCS file --- ./h/em_mnem.h no RCS file --- ./h/em_pseu.h no RCS file --- ./h/em_spec.h no RCS file --- ./lang/basic/src/y.tab.c no RCS file --- ./lang/basic/src/y.tab.h no RCS file --- ./lang/pc/pem/pem22.m no RCS file --- ./lang/pc/pem/pem24.m no RCS file --- ./lang/pc/pem/pem44.m no RCS file --- ./lib/LLgen/incl no RCS file --- ./lib/LLgen/rec no RCS file --- ./mach/m68k2/cg/tables1.c no RCS file --- ./mach/m68k2/cg/tables1.h no RCS file --- ./mach/m68020/ncg/tables1.c no RCS file --- ./mach/m68020/ncg/tables1.h no RCS file --- ./mach/vax4/cg/tables1.c no RCS file --- ./mach/vax4/cg/tables1.h no RCS file --- ./util/LLgen/src/parser no RCS file --- ./util/LLgen/src/LLgen.c no RCS file --- ./util/LLgen/src/Lpars.c no RCS file --- ./util/LLgen/src/Lpars.h no RCS file --- ./util/LLgen/src/tokens.c no RCS file --- ./util/data/em_flag.c no RCS file --- ./util/data/em_mnem.c no RCS file --- ./util/data/em_pseu.c no RCS file --- ./util/ego/share/pop_push.h no RCS file diff --git a/distr/mks b/distr/mks deleted file mode 100755 index be169fb6f..000000000 --- a/distr/mks +++ /dev/null @@ -1 +0,0 @@ -cp .distr $DESTDIR/$1 diff --git a/doc/ceg/Makefile b/doc/ceg/Makefile deleted file mode 100644 index de1e6080f..000000000 --- a/doc/ceg/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -PIC=pic -TBL=tbl -REFER=refer - -../ceg.doc: ceg.tr ceg.ref - $(PIC) ceg.tr | $(REFER) -e -p ceg.ref | $(TBL) > $@ diff --git a/doc/ceg/proposal.tr b/doc/ceg/proposal.tr deleted file mode 100644 index 0063bb623..000000000 --- a/doc/ceg/proposal.tr +++ /dev/null @@ -1,284 +0,0 @@ -.TL - -Code Expander -.br -(proposal) - -.SH -Introduction -.LP -The \fBcode expander\fR, \fBce\fR, is a program that translates EM-code to -objectcode. The main goal is to translate very fast. \fBce\fR is an instance -of the EM_CODE(3L)-interface. During execution of \fBce\fR, \fBce\fR will build -in core a machine independent objectfile ( NEW A.OUT(5L)). With \fBcv\fR or -with routines supplied by the user the machine independent objectcode will -be converted to a machine dependent object code. \fBce\fR needs -information about the targetmachine (e.g. the opcode's). We divide the -information into two parts: -.IP -- The description in assembly instructions of EM-code instructions. -.IP -- The description in objectcode of assembly instructions. -.LP -With these two tables we can make a \fBcode expander generator\fR which -generates a \fBce\fR. It is possible to put the information in one table -but that will probably introduce (propable) more bugs in the table. So we -divide and conquer. With this approach it is also possible to generate -assembly code ( rather yhan objectcode), wich is useful for debugging. -There is of course a link between the two tables, the link -consist of a restriction on the assembly format. Every assembly -instruction must have the following format: -.sp - INSTR ::= LABEL : MNEMONIC [ OPERAND ( "," OPERAND)* ] -.sp -.LP -\fBCeg\fR uses the following algorithm: -.IP \0\0a) -The assembly table will be converted to a (C-)routine assemble(). -assemble() gets as argument a string, the assembler instruction, -and can use the MNEMONIC to execute the corresponding action in the -assembly table. -.IP \0\0b) -The routine assemble() can now be used to convert the EM-code table to -a set of C-routines, wich together form an instance of the -EM_CODE(3L). -.SH -The EM-instruction table -.LP -We use the following grammar: -.sp -.TS -center box ; -l. -TABLE ::= (ROW)* -ROW ::= C_instr ( SPECIAL | SIMPLE) -SPECIAL ::= ( CONDITION SIMPLE)+ 'default' SIMPLE -SIMPLE ::= '==>' ACTIONLIST | '::=' ACTIONLIST -ACTIONLIST ::= [ ACTION ( ';' ACTION)* ] '.' -ACTION ::= function-call | assembly-instruction -.TE -.LP -An example for the 8086: -.LP -.DS -C_lxl - $arg1 == 0 ==> "push bp". - $arg1 == 1 ==> "push EM_BSIZE(bp)". - default ==> "mov cx, $arg1"; - "mov si, bp"; - "1: mov si, EM_BSIZE(si); - "loop 1b" - "push si". -.DE -.sp -Some remarks: -.sp -* The C_instr is a function indentifier in the EM_CODE(3L)-interface. -.LP -* CONDITION is a "boolean" C-expression. -.LP -* The arguments of an EM-instruction can be used in CONDITION and in assembly -instructions. They are referred by $arg\fIi\fR. \fBceg\fR modifies the -arguments as follows: -.IP \0\0- -For local variables at positive offsets it increases this offset by EM_BSIZE -.IP \0\0- -It makes names en labels unique. The user must supply the formats (see mach.h). -.LP -* function-call is allowed to implement e.g. push/pop optimization. -For example: -.LP -.DS -C_adi - $arg1 == 2 ==> combine( "pop ax"); - combine( "pop bx"); - "add ax, bx"; - save( "push ax"). - default ==> arg_error( "C_adi", $arg1). -.DE -.LP -* The C-functions called in the EM-instructions table have to use the routine -assemble()/gen?(). "assembler-instr" is in fact assemble( "assembler-instr"). -.LP -* \fBceg\fR takes care not only about the conversions of arguments but also -about -changes between segments. There are situation when one doesn't want -conversion of arguments. This can be done by using ::= in stead of ==>. -This is usefull when two C_instr are equivalent. For example: -.IP -C_slu ::= C_sli( $arg1) -.LP -* There are EM-CODE instructions wich are machine independent (e.g. C_open()). -For these EM_CODE instructions \fBceg\fR will generate \fIdefault\fR- -instructions. There is one exception: in the case of C_pro() the tablewriter -has to supply a function prolog(). -.LP -* Also the EM-pseudoinstructions C_bss_\fIcstp\fR(), C_hol_\fIcstp\fR(), -C_con_\fIcstp\fR() and C_rom_\fIcstp\fR can be translated automaticly. -\fBceg\fR only has to know how to interpretate string-constants: -.DS -\&..icon $arg2 == 1 ==> gen1( (char) atoi( $arg1)) - $arg2 == 2 ==> gen2( atoi( $arg1)) - $arg2 == 4 ==> gen4( atol( $arg1)) -\&..ucon $arg2 == 1 ==> gen1( (char) atoi( $arg1)) - $arg2 == 2 ==> gen2( atoi( $arg1)) - $arg2 == 4 ==> gen4( atol( $arg1)) -\&..fcon ::= not_implemented( "..fcon") -.DE -.LP -* Still, life can be made easier for the tablewriter; For the routines wich -he/she didn't implement \fBceg\fR will generate a default instruction wich -generates an error-message. \fBceg\fR seems to generate : -.IP -C_xxx ::= not_implemented( "C_xxx") -.SH -The assembly table -.LP -How to map assembly on objectcode. -.LP -Each row in the table consists of two fields, one field for the assembly -instruction, the other field for the corresponding objectcode. The tablewriter -can use the following primitives to generate code for the machine -instructions : -.IP "\0\0gen1( b)\0\0:" 17 -generates one byte in de machine independent objectfile. -.IP "\0\0gen2( w)\0\0:" 17 -generates one word ( = two bytes), the table writer can change the byte -order by setting the flag BYTES_REVERSED. -.IP "\0\0gen4( l)\0\0:" 17 -generates two words ( = four bytes), the table writer can change the word -order by setting the flag WORDS_REVERSED. -.IP "\0\0reloc( n, o, r)\0\0:" 17 -generates relocation information for a label ( = name + offset + -relocationtype). -.LP -Besides these primitives the table writer may use his self written -C-functions. This allows the table writer e.g. to write functions to set -bitfields within a byte. -.LP -There are more or less two methods to encode the assembly instructions: -.IP \0\0a) -MNEMONIC and OPERAND('s) are encoded independently of each other. This can be -done when the target machine has an orthogonal instruction set (e.g. pdp-11). -.IP \0\0b) -MNEMONIC and OPERAND('s) together determine the opcode. In this case the -assembler often uses overloading: one MNEMONIC is used for several -different machine-instructions. For example : (8086) -.br - mov ax, bx -.br - mov ax, variable -.br -These instructions have different opcodes. -.LP -As the transformation MNEMONIC-OPCODE is not one to -one the table writer must be allowed to put restrictions on the operands. -This can be done with type declarations. For example: -.LP -.DS - mov dst:REG, src:MEM ==> - gen1( 0x8b); - modRM( op2.reg, op1); -.DE -.DS - mov dst:REG, src:REG ==> - gen1( 0x89); - modRM( op2.reg, op1); -.DE -.LP -modRM() is a function written by the tablewriter and is used to encode -the operands. This frees the table writer of endless typing. -.LP -The table writer has to do the "typechecking" by himself. But typechecking -is almost the same as operand decoding. So it's more efficient to do this -in one function. We now have all the tools to describe the function -assemble(). -.IP -assemble() first calls the function -decode_operand() ( by the table writer written), with two arguments: a -string ( the operand) and a -pointer to a struct. The struct is declared by the table writer and must -consist of at least a field called type. ( the other fields in the struct can -be used to remember information about the decoded operand.) Now assemble() -fires a row wich is selected by mapping the MNEMONIC and the type of the -operands. -.br -In the second field of a row there may be references to other -fields in the struct (e.g. op2.reg in the example above). -.LP -We ignored one problem. It's possible when the operands are encoded, that -not everything is known. For example $arg\fIi\fR arguments in the -EM-instruction table get their value at runtime. This problem is solved by -introducing a function eval(). eval() has a string as argument and returns -an arith. The string consists of constants and/or $arg\fIi\fR's and the value -returned by eval() is the value of the string. To encode the $arg\fIi\fR's -in as few bytes as possible the table writer can use the statements %if, -%else and %endif. They can be used in the same manner as #if, #else and -#endif in C and result in a runtime test. An example : -.LP -.DS - -- Some rows of the assembly table - - mov dst:REG, src:DATA ==> - %if sfit( eval( src), 8) /* does the immediate-data fit in 1 byte? */ - R53( 0x16 , op1.reg); - gen1( eval( src)); - %else - R53( 0x17 , op1.reg); - gen2( eval( src)); - %endif -.LD - - mov dst:REG, src:REG ==> - gen1( 0x8b); - modRM( op1.reg, op2); - -.DE -.DS - -- The corresponding part in the function assemble() : - - case MNEM_mov : - decode_operand( arg1, &op1); - decode_operand( arg2, &op2); - if ( REG( op1.type) && DATA( op2.type)) { - printf( "if ( sfit( %s, 8)) {\\\\n", eval( src)); - R53( 0x16 , op1.reg); - printf( "gen1( %s)\\\\n", eval( arg2)); - printf( "}\\\\nelse {\\\\n"); - R53( 0x17 , op1.reg); - printf( "gen2( %s)\\\\n", eval( arg2)); - printf( "}\\\\n"); - } - else if ( REG( op1.type) && REG( op2.type)) { - gen1( 0x8b); - modRM( op1.reg, op2); - } - - -.DE -.DS - -- Some rows of the right part of the EM-instruction table are translated - -- in the following C-functions. - - "mov ax, $arg1" ==> - if ( sfit( w, 8)) { /* w is the actual argument of C_xxx( w) */ - gen1( 176); /* R53() */ - gen1( w); - } - else { - gen1( 184); - gen2( w); - } -.LD - - "mov ax, bx" ==> - gen1( 138); - gen1( 99); /* modRM() */ -.DE -.SH -Restrictions -.LP -.IP \0\01) -The EM-instructions C_exc() is not implemented. -.IP \0\03) -All messages are ignored. diff --git a/doc/ceg/prototype.tr b/doc/ceg/prototype.tr deleted file mode 100644 index c5c5d91bd..000000000 --- a/doc/ceg/prototype.tr +++ /dev/null @@ -1,276 +0,0 @@ -.TL -A prototype Code expander -.NH -Introduction -.PP -A program to be compiled with ACK is first fed into the preprocessor. -The output of the preprocessor goes into the appropiate front end, -whose job it is to produce EM. The EM code generated is -fed into the peephole optimizer, wich scans it with a window of few -instructions, replacing certain inefficient code sequences by better -ones. Following the peephole optimizer follows a backend wich produces -good assembly code. The assembly code goes into the assembler and the objectcode -then goes into the loader/linker, the final component in the pipeline. -.PP -For various applications this scheme is too slow. For example for testing -programs; In this case the program has to be translated fast and the -runtime of the objectcode may be slower. A solution is to build a code -expander ( \fBce\fR) wich translates EM code to objectcode. Of course this -has to -be done automaticly by a code expander generator, but to get some feeling -for the problem we started out to build prototypes. -We built two types of ce's. One wich tranlated EM to assembly, one -wich translated EM to objectcode. -.NH -EM to assembly -.PP -We made one for the 8086 and one for the vax4. These ce's are instances of the -EM_CODE(3L)-interface and produce for a single EM instruction a set -of assembly instruction wich are semantic equivalent. -We implemented in the 8086-ce push/pop-optimalization. -.NH -EM to objectcode -.PP -Instead of producing assembly code we tried to produce vax4-objectcode. -During execution of ce, ce builds in core a machine independent -objectfile ( NEW A.OUT(5L)) and just before dumping the tables this -objectfile is converted to a Berkly 4.2BSD a.out-file. We build two versions; -One with static memory allocation and one with dynamic memory allocation. -If the first one runs out of memory it will give an error message and stop, -the second one will allocate more memory and proceed with producing -objectcode. -.PP -The C-frontend calls the EM_CODE-interface. So after linking the frontend -and the ce we have a pipeline in a program saving a lot of i/o. -It is interesting to compare this C-compiler ( called fcemcom) with "cc -c". -fcemcom1 (the dynamic variant of fcemcom) is tuned in such a way, that -alloc() won't be called. -.NH 2 -Compile time -.PP -fac.c is a small program that produces n! ( see below). foo.c is small program -that loops a lot. -.TS -center, box, tab(:); -c | c | c | c | c | c -c | c | n | n | n | n. -compiler : program : real : user : sys : object size -= -fcemcom : sort.c : 31.0 : 17.5 : 1.8 : 23824 -fcemcom1 : : 59.0 : 21.2 : 3.3 : -cc -c : : 50.0 : 38.0 : 3.5 : 6788 -_ -fcemcom : ed.c : 37.0 : 23.6 : 2.3 : 41744 -fcemcom1 : : 1.16.0 : 28.3 : 4.6 : -cc -c : : 1.19.0 : 54.8 : 4.3 : 11108 -_ -fcemcom : cp.c : 4.0 : 2.4 : 0.8 : 4652 -fcemcom1 : : 9.0 : 3.0 : 1.0 : -cc -c : : 8.0 : 5.2 : 1.6 : 1048 -_ -fcemcom : uniq.c : 5.0 : 2.5 : 0.8 : 5568 -fcemcom1 : : 9.0 : 2.9 : 0.8 : -cc -c : : 13.0 : 5.4 : 2.0 : 3008 -_ -fcemcom : btlgrep.c : 24.0 : 7.2 : 1.4 : 12968 -fcemcom1 : : 23.0 : 8.1 : 1.2 : -cc -c : : 1.20.0 : 15.3 : 3.8 : 2392 -_ -fcemcom : fac.c : 1.0 : 0.1 : 0.5 : 216 -fecmcom1 : : 2.0 : 0.2 : 0.5 : -cc -c : : 3.0 : 0.7 : 1.3 : 92 -_ -fcemcom : foo.c : 4.0 : 0.2 : 0.5 : 272 -fcemcom1 : : 11.0 : 0.3 : 0.5 : -cc -c : : 7.0 : 0.8 : 1.6 : 108 -.TE -.NH 2 -Run time -.LP -Is the runtime very bad? -.TS -tab(:), box, center; -c | c | c | c | c -c | c | n | n | n. -compiler : program : real : user : system -= -fcem : sort.c : 22.0 : 17.5 : 1.5 -cc : : 5.0 : 2.4 : 1.1 -_ -fcem : btlgrep.c : 1.58.0 : 27.2 : 4.2 -cc : : 12.0 : 3.6 : 1.1 -_ -fcem : foo.c : 1.0 : 0.7 : 0.1 -cc : : 1.0 : 0.4 : 0.1 -_ -fcem : uniq.c : 2.0 : 0.5 : 0.3 -cc : : 1.0 : 0.1 : 0.2 -.TE -.NH 2 -quality object code -.LP -The runtime is very bad so its interesting to have look at the code which is -produced by fcemcom and by cc -c. I took a program which computes recursively -n!. -.DS -long fac(); - -main() -{ - int n; - - scanf( "%D", &n); - printf( "fac is %D\\\\n", fac( n)); -} - -long fac( n) -int n; -{ - if ( n == 0) - return( 1); - else - return( n * fac( n-1)); -} -.DE -.br -.br -.br -.br -.LP -"cc -c fac.c" produces : -.DS -fac: tstl 4(ap) - bnequ 7f - movl $1, r0 - ret -7f: subl3 $1, 4(ap), r0 - pushl r0 - call $1, fac - movl r0, -4(fp) - mull3 -4(fp), 4(ap), r0 - ret -.DE -.br -.br -.LP -"fcem fac.c fac.o" produces : -.DS -_fac: 0 -42: jmp be -48: pushl 4(ap) -4e: pushl $0 -54: subl2 (sp)+,(sp) -57: tstl (sp)+ -59: bnequ 61 -5b: jmp 67 -61: jmp 79 -67: pushl $1 -6d: jmp ba -73: jmp b9 -79: pushl 4(ap) -7f: pushl $1 -85: subl2 (sp)+,(sp) -88: calls $0,_fac -8f: addl2 $4,sp -96: pushl r0 -98: pushl 4(ap) -9e: pushl $4 -a4: pushl $4 -aa: jsb .cii -b0: mull2 (sp)+,(sp) -b3: jmp ba -b9: ret -ba: movl (sp)+,r0 -bd: ret -be: jmp 48 -.DE -.NH 1 -Conclusions -.PP -comparing "cc -c" with "fcemcom" -.LP -.TS -center, box, tab(:); -c | c s | c | c s -^ | c s | ^ | c s -^ | c | c | ^ | c | c -l | n | n | n | n | n. -program : compile time : object size : runtime -:_::_ -: user : sys :: user : sys -= -sort.c : 0.47 : 0.5 : 3.5 : 7.3 : 1.4 -_ -ed.c : 0.46 : 0.5 : 3.8 : : : -_ -cp.c : 0.46 : 0.5 : 4.4 : : : -_ -uniq.c : 0.46 : 0.4 : 1.8 : : : -_ -btlgrep.c : 0.47 : 0.3 : 5.4 : 7.5 : 3.8 -_ -fac.c : 0.14 : 0.4 : 2.3 : 1.8 : 1.0 -_ -foo.c : 0.25 : 0.3 : 2.5 : 5.0 : 1.5 -.TE -.PP -The results for fcemcom1 are almost identical; The only thing that changes -is that fcemcom1 is 1.2 slower than fcemcom. ( compile time) This is due to -to an another datastructure . In the static version we use huge array's for -the text- and -data-segment, the relocation information, the symboltable and stringarea. -In the dynamic version we use linked lists, wich makes it expensive to get -and to put a byte on a abritrary memory location. So it is probably better -to use realloc(), because in the most cases there will be enough memory. -.PP -The quality of the objectcode is very bad. The reason is that the frontend -generates bad code and expects the peephole-optimizer to improve the code. -This is also one of the main reasons that the runtime is very bad. -(e.g. the expensive "cii" with arguments 4 and 4 could be deleted.) -So its seems a good -idea to put a new peephole-optimizer between the frontend and the ce. -.PP -Using the peephole optimizer the ce would produce : -.DS -_fac: 0 - pushl 4(ap) - tstl (sp)+ - beqlu 1f - jmp 3f - 1 : pushl $1 - jmp 2f - 3 : pushl 4(ap) - decl (sp) - calls $0,_fac - addl2 $4,sp - pushl r0 - pushl 4(ap) - mull2 (sp)+,(sp) - movl (sp)+,r0 - 2 : ret -.DE -.PP -Bruce McKenzy already implemented it and made some improvements in the -source code of the ce. The compile-time is two to two and a half times better -and the -size of the objectcode is two to three times bigger.(comparing with "cc -c") -Still we could do better. -.PP -Using peephole- and push/pop-optimization ce could produce : -.DS -_fac: 0 - tstl 4(ap) - beqlu 1f - jmp 2f - 1 : pushl $1 - jmp 3f - 2 : decl 4(ap) - calls $0,_fac - addl2 $4,sp - mull3 4(ap), r0, -(sp) - movl (sp)+, r0 - 3 : ret -.DE -.PP -prof doesn't cooperate, so no profile information. -.PP diff --git a/doc/cref.doc b/doc/cref.doc deleted file mode 100644 index 76c4f84d6..000000000 --- a/doc/cref.doc +++ /dev/null @@ -1,323 +0,0 @@ -.\" $Header$ -.nr ID 4 -.de hd -'sp 2 -'tl ''-%-'' -'sp 3 -.. -.de fo -'bp -.. -.tr ~ -. TITLE -.de TL -.sp 15 -.ce -\\fB\\$1\\fR -.. -. AUTHOR -.de AU -.sp 15 -.ce -by -.sp 2 -.ce -\\$1 -.. -. DATE -.de DA -.sp 3 -.ce -( Dated \\$1 ) -.. -. INSTITUTE -.de VU -.sp 3 -.ce 4 -Wiskundig Seminarium -Vrije Universteit -De Boelelaan 1081 -Amsterdam -.. -. PARAGRAPH -.de PP -.sp -.ti +\n(ID -.. -.nr CH 0 1 -. CHAPTER -.de CH -.nr SH 0 1 -.bp -.in 0 -\\fB\\n+(CH.~\\$1\\fR -.PP -.. -. SUBCHAPTER -.de SH -.sp 3 -.in 0 -\\fB\\n(CH.\\n+(SH.~\\$1\\fR -.PP -.. -. INDENT START -.de IS -.sp -.in +\n(ID -.. -. INDENT END -.de IE -.in -\n(ID -.sp -.. -.de PT -.ti -\n(ID -.ta \n(ID -.fc " @ -"\\$1@"\c -.fc -.. -. DOUBLE INDENT START -.de DS -.sp -.in +\n(ID -.ll -\n(ID -.. -. DOUBLE INDENT END -.de DE -.ll +\n(ID -.in -\n(ID -.sp -.. -. EQUATION START -.de EQ -.sp -.nf -.. -. EQUATION END -.de EN -.fi -.sp -.. -. ITEM -.de IT -.sp -.in 0 -\\fB~\\$1\\fR -.ti +5 -.. -.de CS -.br -~-~\\ -.. -.br -.fi -.TL "Ack-C reference manual" -.AU "Ed Keizer" -.DA "September 12, 1983" -.VU -.wh 0 hd -.wh 60 fo -.CH "Introduction" -The C frontend included in the Amsterdam Compiler Kit -translates UNIX-V7 C into compact EM code [1]. -The language accepted is described in [2] and [3]. -This document describes which implementation dependent choices were -made in the Ack-C frontend and -some restrictions and additions. -.CH "The language" -.PP -Under the same heading as used in [2] we describe the -properties of the Ack-C frontend. -.IT "2.2 Identifiers" -External identifiers are unique up to 7 characters and allow -both upper and lower case. -.IT "2.3 Keywords" -The word \fBvoid\fP is also reserved as a keyword. -.IT "2.4.3 Character constants" -The ASCII-mapping is used when a character is converted to an -integer. -.IT "2.4.4 Floating constants" -To prevent loss of precision the compiler does not perform -floating point constant folding. -.IT "2.6 Hardware characteristics" -The size of objects of the several arithmetic types and -pointers depend on the EM-implementation used. -The ranges of the arithmetic types depend on the size used, -the C-frontend assumes two's complement representation for the -integral types. -All sizes are multiples of bytes. -The calling program \fIack\fP[4] passes information about the -size of the types to the compiler proper. -.br -However, a few general remarks must be made: -.sp 1 -.IS -.PT (a) -The size of pointers is a multiple of -(or equal to) the size of an \fIint\fP. -.PT (b) -The following relations exist for the sizes of the types -mentioned: -.br -.ti +5 -\fIchar<=short<=int<=long\fP -.PT (c) -Objects of type \fIchar\fP use one 8-bit byte of storage, -although several bytes are allocated sometimes. -.PT (d) -All sizes are in multiples of bytes. -.PT (e) -Most EM implementations use 4 bytes for floats and 8 bytes -for doubles, but exceptions to this rule occur. -.IE -.IT "4 What's in a name" -The type \fIvoid\fP is added. -Objects of type void do not exist. -Functions declared as returning void, do not return a value at all. -.IT "6.1 Characters and integers" -Objects of type \fIchar\fP are unsigned and do not cause -sign-extension when converted to \fIint\fP. -The range of characters values is from 0 to 255. -.IT "6.3 Floating and integral" -Floating point numbers are truncated towards zero when -converted to the integral types. -.IT "6.4 Pointers and integers" -When a \fIlong\fP is added to or subtracted from a pointer and -longs are larger then pointers the \fIlong\fP is converted to an -\fIint\fP before the operation is performed. -.IT "7.2 Unary operators" -It is allowed to cast any expression to the type \fIvoid\fP. -.IT "8.2 Type specifiers" -One type is added to the type-specifiers: -.br -.IS -void -.IE -.IT "8.5 Structure and union declarations" -The only type allowed for fields is \fIint\fP. -Fields with exactly the size of \fIint\fP are signed, -all other fields are unsigned. -.br -The size of any single structure must be less then 4096 bytes. -.IT "8.6 Initialization" -Initialization of structures containing bit fields is not -allowed. -There is one restriction when using an 'address expression' to initialize -an integral variable. -The integral variable must have the same size as a pointer. -Conversions altering the size of the address expression are not allowed. -.IT "9.10 Return statement" -Return statements of the form: -.IS - return ; -.IE -are the only form of return statement allowed in a function of type -function returning void. -.IT "10.1 External function definitions" -The total amount for storage used for parameters -in any function must be less then 4096 bytes. -The same holds for the total amount of storage occupied by the -automatic variables declared inside any function. -.sp -Using formal parameters whose size is smaller the the size of an int -is less efficient on several machines. -At procedure entry these parameters are converted from integer to the -declared type, because the compiler doesn't know where the least -significant bytes are stored in the int. -.IT "11.2 Scope of externals" -Most C compilers are rather lax in enforcing the restriction -that only one external definition without the keyword -\fIextern\fP is allowed in a program. -The Ack-C frontend is very strict in this. -The only exception is that declarations of arrays with a -missing first array bounds expression are regarded to have an -explicit keyword \fIextern\fP. -.IT "14.4 Explicit pointer conversions" -Pointers may be larger the ints, thus assigning a pointer to an -int and back will not always result in the same pointer. -The process mentioned above works with integrals -of the same size or larger as pointers in all EM implementations -having such integrals. -When converting pointers to an integral type or vice-versa, -the pointers is seen as an unsigned int. -.br -EM guarantees that any object can be placed at a word boundary, -this allows the C-programs to use \fIint\fP pointers -as pointers to objects of any type not smaller than an \fIint\fP. -.CH "Frontend options" -The C-frontend has a few options, these are controlled -by flags: -.IS -.PT -V -This flag is followed by a sequence of letters each followed by -positive integers. Each letter indicates a -certain type, the integer following it specifies the size of -objects of that type. One letter indicates the wordsize used. -.IS -.sp 1 -.TS -center tab(:); -l l16 l l. -letter:type:letter:type - -w:wordsize:i:int -s:short:l:long -f:float:d:double -p:pointer:: -.TE -.sp 1 -All existing implementations use an integer size equal to the -wordsize. -.IE -The calling program \fIack\fP[4] provides the frontend with -this flag, with values depending on the machine used. -.sp 1 -.PT -l -The frontend normally generates code to keep track of the line -number and source file name at runtime for debugging purposes. -Currently a pointer to a -string containing the filename is stored at a fixed place in -memory at each function -entry and the line number at the start of every expression. -At the return from a function these memory locations are not reset to -the values they had before the call. -Most library routines do not use this feature and thus do not -ruin the current line number and filename when called. -However, you are really unlucky when your program crashes due -to a bug in such a library function, because the line number -and filename do not indicate that something went wrong inside -the library function. -.br -Providing the flag -l to the frontend tells it not to generate -the code updating line number and file name. -This is, for example, used when translating the stdio library. -.br -When the \fIack\fP[4] is called with the -L flag it provides -the frontend with this flag. -.sp 1 -.PT -Xp -When this flag is present the frontend generates a call to -the function \fBprocentry\fP at each function entry and a -call to \fBprocexit\fP at each function exit. -Both functions are provided with one parameter, -a pointer to a string containing the function name. -.br -When \fIack\fP is called with the -p flag it provides the -frontend with this flag. -.IE -.CH References -.IS -.PT [1] -A.S. Tanenbaum, Hans van Staveren, Ed Keizer and Johan -Stevenson \fIDescription of a machine architecture for use with -block structured languages\fP Informatica report IR-81. -.sp 1 -.PT [2] -B.W. Kernighan and D.M. Ritchie, \fIThe C Programming -language\fP, Prentice-Hall, 1978 -.PT [3] -D.M. Ritchie, \fIC Reference Manual\fP -.sp -.PT [4] -UNIX manual ack(I). diff --git a/doc/ego/Makefile b/doc/ego/Makefile deleted file mode 100644 index f6aefa1ca..000000000 --- a/doc/ego/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -REFS=-p refs.opt -p refs.stat -p refs.gen -INTRO=intro/intro? -OV=ov/ov? -IC=ic/ic? -CF=cf/cf? -IL=il/il? -SR=sr/sr? -CS=cs/cs? -SP=sp/sp? -UD=ud/ud? -LV=lv/lv? -CJ=cj/cj? -BO=bo/bo? -RA=ra/ra? -CA=ca/ca? -EGO=$(INTRO) $(OV) $(IC) $(CF) $(IL) $(SR) $(CS) $(SP) $(CJ) $(BO) \ - $(UD) $(LV) $(RA) $(CA) -REFER=refer -TROFF=troff -TBL=tbl -TARGET=-Tlp - -../ego.doc: refs.opt refs.stat refs.gen intro/head intro/tail $(EGO) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(EGO) intro/tail | $(TBL) > ../ego.doc - -ego.f: refs.opt refs.stat refs.gen intro/head intro/tail $(EGO) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(EGO) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ego.f -intro.f: refs.opt refs.stat refs.gen intro/head intro/tail $(INTRO) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(INTRO) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > intro.f -ov.f: refs.opt refs.stat refs.gen intro/head intro/tail $(OV) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(OV) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ov.f -ic.f: refs.opt refs.stat refs.gen intro/head intro/tail $(IC) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(IC) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ic.f -cf.f: refs.opt refs.stat refs.gen intro/head intro/tail $(CF) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(CF) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > cf.f -il.f: refs.opt refs.stat refs.gen intro/head intro/tail $(IL) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(IL) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > il.f -sr.f: refs.opt refs.stat refs.gen intro/head intro/tail $(SR) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(SR) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > sr.f -cs.f: refs.opt refs.stat refs.gen intro/head intro/tail $(CS) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(CS) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > cs.f -sp.f: refs.opt refs.stat refs.gen intro/head intro/tail $(SP) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(SP) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > sp.f -cj.f: refs.opt refs.stat refs.gen intro/head intro/tail $(CJ) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(CJ) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > cj.f -bo.f: refs.opt refs.stat refs.gen intro/head intro/tail $(BO) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(BO) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > bo.f -ud.f: refs.opt refs.stat refs.gen intro/head intro/tail $(UD) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(UD) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ud.f -lv.f: refs.opt refs.stat refs.gen intro/head intro/tail $(LV) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(LV) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > lv.f -ra.f: refs.opt refs.stat refs.gen intro/head intro/tail $(RA) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(RA) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ra.f -ca.f: refs.opt refs.stat refs.gen intro/head intro/tail $(CA) - $(REFER) -sA+T -l4,2 $(REFS) intro/head $(CA) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ca.f diff --git a/doc/em/Makefile b/doc/em/Makefile deleted file mode 100644 index e8bc072d8..000000000 --- a/doc/em/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -HOME=../.. - -TBL=tbl -NROFF=nroff -SUF=pr -TARGET=-Tlp - -head: ../em.$(SUF) - -FILES = macr.nr title.nr intro.nr mem.nr ispace.nr dspace.nr mapping.nr \ - types.nr descr.nr env.nr traps.nr mach.nr assem.nr \ - app.int.nr app.codes.nr app.exam.nr cont.nr - -IOP=$(HOME)/etc/ip_spec.t# # to construct itables from - -../em.$(SUF): $(FILES) itables dispatdummy em.i Makefile - $(TBL) $(FILES) | $(NROFF) -mkun $(TARGET) > ../em.$(SUF) - -app.codes.pr: app.codes.nr itables dispatdummy - -itables: $(IOP) ip.awk - awk -f ip.awk $(IOP) | sed 's/-/\\-/g' | $(TBL) >itables - -dispatdummy: $(IOP) mkdispatch - mkdispatch < $(IOP) > dispatdummy - sed -f dispat1.sed < dispatdummy | $(TBL) > dispat1 - sed -f dispat2.sed < dispatdummy | $(TBL) > dispat2 - sed -f dispat3.sed < dispatdummy | $(TBL) > dispat3 - -mkdispatch: mkdispatch.c - $(CC) -I$(HOME)/h -o mkdispatch mkdispatch.c $(HOME)/lib.bin/em_data.a - -.SUFFIXES : .pr .nr -.nr.pr: ; $(TBL) macr.nr $*.nr | $(NROFF) -mkun >$@ - -clean: - rm -f *.pr itables *.out dispatdummy dispat? *.o mkdispatch diff --git a/doc/em/addend.n b/doc/em/addend.n deleted file mode 100644 index 368ca2d12..000000000 --- a/doc/em/addend.n +++ /dev/null @@ -1,1122 +0,0 @@ -.lg 0 -.ta 8 16 24 32 40 48 56 64 72 80 -.hw iden-ti-fi-er -.nr a 0 1 -.nr f 1 1 -.de x1 -'sp 2 -'tl '''%' -'sp 2 -.ns -.. -.wh 0 x1 -.de fo -'bp -.. -.wh 60 fo -.ll 79 -.lt 79 -.de HT -.ti -4 -.. -.de PP -.sp -.ne 2 -.ti +5 -.. -.de SE -.bp -\fB\\n+a. \\$1\fR -.nr b 0 1 -.. -.de SB -.br -.ne 10 -.sp 5 -\fB\\na.\\n+b. \\$1\fR -.. -.de DC -.ti -14 -DECISION~\\$1: -.. -.de IN -.in +6 -.. -.de OU -.in -6 -.. -.tr ~ -.sp 5 -.rs -.sp 10 -.ce 3 -Changes in EM-1 - -Addendum to Informatica Rapport IR-54 -.sp 5 -.PP -This document describes a revision of EM-1. -A list of differences is presented roughly in the order IR-54 -describes the original architecture. -A complete list of EM-1 pseudo's and instructions is also included. -.SE Introduction -.PP -EM is a family of intermediate languages, resembling assembly -language for a stack machine. -EM defines the layout of data memory and a partitioning -of instruction memory. -EM has can do operations on five basic types: -pointers, signed integers, unsigned integers, floating point numbers -and sets of bits. -The size of pointers is fixed in each member, -in contrast to the sizes of the other types. -Each member has one more fixed size: the word size. -This is the mimimum size of any object on the stack. -The sizes of all objects on the stack are assumed to -multiples of the word size. -We assume that pointer and word-sizes are both powers of two. -.PP -It is possible to load objects smaller then the word size from memory. -These objects are converted to objects of the word size by -clearing the most significant bytes. -(A separate conversion instruction can do sign extension). -While storing objects smaller then the word size are stored in memory, -the most significant bytes are ignored. -The size of such objects has to be a divisor of the word size. -.PP -Put in other terms, instructions such as LOC, LOL, LOE, STF, etc. -manipulate WORDS. Up until now, a word was defined as 16 bits. -It is now possible to define a word size other than 16 bits. For -example, MES 2,1,2 defines a word to be 8 bits and a pointer to be -16 bits. As another example, MES 2,4,4 defines a word to be 32 bits -and a pointer to be 32 bits. -.PP -If a compiler receives flags telling it to use 32 bit integers, it now -has a choice of setting the word length to 16 bits and using LDL etc -for dealing with integers, or setting the word length to 32 bits and using -LOL etc for integers. -For example, x:=a+b for 32-bit integers would become: - - MES 2,2,4 MES 2,4,4 - LDL a LOL a - LDL b LOL b - ADI 4 ADI 4 - SDL x STL x - -In many cases, the target machine code that is finally produced from either -of the above sequences will not show any traces of the stack machine, however -for some instructions actual pushes and pops at run time will be necessary. -Choosing a wider EM word will usually produce fewer stack operations than -a narrower word, but it eliminates the possibility of doing arithmetic on -quantities smaller than a word. If, for example, a compiler chooses a 32-bit -EM word, it will be difficult to add two 16 bit integers with ADI, since -the argument must be multiple of the word size. -(The operation can be done by converting the operands to 32 bits using CII, -adding the 32-bit numbers, and reconverting the result.) -On the other hand, choosing a 16-bit EM word makes it possible to do both -16-bit adds (ADI 2) and 32-bit adds (ADI 4), -but the price paid is that 32-bit operations will be viewed as double -precision, and may be slightly less efficient on target machines with a -32-bit word, i.e. the EM to target translator may not take full advantage -of the 32 bit facilities. -.PP -Note that since LOC pushes a WORD on the stack, the argument of LOC -must fit ina word. LOC 256 on an EM machine with a 1-byte word length -is not allowed. LDC 256 is allowed, however. -.PP -A general rule of thumb is that the compiler should choose an EM word -length equal to the width of a single precision integer. -Obviously, compilers should be well parameterized to allow the integer -size(s) and word size(s) to be changed by just changing a few constants. -.PP -The size of a instruction space pointer in is the same -as the size of a data space pointer. -.PP -EM assumes two's complement arithmetic on signed integers, -but does not define an ordering of the bytes in a integer. -The lowest numbered byte of a two-byte object can contain -either the most or the least significant part. -.SE Memory -.PP -EM has two separate addressing spaces, instruction and data. -The sizes of these spaces are not specified. -The layout of instruction space in not defined. -Any interpreter or translator may assume a layout fitting his/her needs. -The layout of data memory is specified by EM. -EM data memory consists of a sequence of 8-bit bytes each separately -addressable. -Certain alignment restrictions exist for object consisting of multiple bytes. -Objects smaller then the word size can only be addressed -at multiples of the object size. -For example: in a member with a four-byte word size, two-byte integers -can only be accessed from even addresses. -Objects larger then the word size can only be placed at multiples -of the word size. -For example: in a member with a four-byte word size, -eight-byte floating point numbers can be fetched at addresses -0, 4, 8, 12, etc. -.SB "Procedure identifiers" -.PP -Procedure identifiers in EM have the same size -as pointers. -Any implementation of EM is free to use any method of identifying procedures. -Common methods are indices into tables containing further information -and addresses of the first instructions of procedures. -.SB "Heap and Stack in global data" -.PP -The stack grows downward, the heap grows upward. -The stack pointer points to the lowest occupied word on the stack. -The heap pointer marks the first free word in the heap area. -.br -.ne 39 -.sp 1 -.nf - 65534 -> |-------------------------------| - |///////////////////////////////| - |//// unimplemented memory /////| - |///////////////////////////////| - SB -> |-------------------------------| - | | - | stack and local area | <- LB - | | - | | - |-------------------------------| <- SP - |///////////////////////////////| - |// implementation dependent //| - |///////////////////////////////| - |-------------------------------| <- HP - | | - | heap area | - | | - | | - |-------------------------------| - | | - | global area | - | | - EB -> |-------------------------------| - | | - | | - | program text | <- PC - | | - | | - PB -> |-------------------------------| - |///////////////////////////////| - |////////// undefined //////////| - |///////////////////////////////| - 0 -> |-------------------------------| - - Fig. \nf. Example of memory layout showing typical register - positions during execution of an EM program. -.fi -.SB "Data addresses as arguments" -.PP -Anywhere previous versions of the EM assembly language -allowed identifiers of objects in -data space, -it is also possible to use 'identifier+constant' or 'identifier-constant'. -For example, both "CON LABEL+4" and "LAE SAVED+3" are allowed. -More complicated expressions are illegal. -.SB "Local data area" -.PP -The mark block has been banished. -When calling a procedure, -the calling routine first has to push the actual parameters. -All language implementations currently push their arguments -in reverse order, to be compatible with C. -Then the procedure is called using a CAL or CAI instruction. -Either the call or the procedure prolog somehow has to save -the return address and dynamic link. -The prolog allocates the space needed for locals and is free to -surround this space with saved registers and other information it -deems necessary. -.PP -The locals are now accessed using negative offsets in LOL, LDL, SDL, LAL, -LIL, SIL and STL instructions. -The parameters are accessed using positive offsets in LOL, LDL, SDL, LAL, -LIL, STL and -STL instructions. -The prolog might have stored information in the area between parameters and -locals. -As a consequence there are two bases, AB(virtual) and LB. -AB stands for Argument Base and LB stands for Local Base. -Positive arguments to LOL etc ... are interpreted as offsets from AB, -negative arguments as offsets from LB. -.PP -The BEG instruction is not needed to allocate the locals because -storage for locals is set aside in the prolog. -The instruction still exists under the name ASP (Adjust Stack Pointer). -.PP -Procedures return using the RET instruction. -The RET pops the function result from the stack and -brings the stack pointer and other relevant registers to the state -they had just before the procedure was called. -The RET instruction expects that - aside from possible function results - -the stack pointer has the value it had after execution of the prolog. -RET finally returns control to the calling routine. -The actual parameters have to be removed from the stack by the calling routine, -and not by the called procedure. -.sp 1 -.ne 38 -.nf - - - - |===============================| - | actual argument n | - |-------------------------------| - | . | - | . | - | . | - |-------------------------------| - | actual argument 1 | ( <- AB ) - |===============================| - |///////////////////////////////| - |// implementation dependent //| - |///////////////////////////////| <- LB - |===============================| - | | - | local variables | - | | - |-------------------------------| - | | - | compiler temporaries | - | | - |===============================| - |///////////////////////////////| - |// implementation dependent //| - |///////////////////////////////| - |===============================| - | | - | dynamic local generators | - | | - |===============================| - | operand | - |-------------------------------| - | operand | <- SP - |===============================| - - A sample procedure frame. - -.fi -.sp 1 -This scheme allows procedures to be called with a variable number -of parameters. -The parameters have to be pushed in reverse order, -because the called procedure has to be able to locate the first one. -.PP -.PP -Since the mark block has disappeared, a new mechanism for static -links had to be created. -All compilers use the convention that EM procedures needing -a static link will find a link in their zero'th parameter, -i.e. the last one pushed on the stack. -This parameter should be invisible to users of the compiler. -The link needs to be in a fixed place because the lexical instructions -have to locate it. -The LEX instruction is replaced by two instructions: LXL and LXA. -\&"LXL~n" finds the LB of a procedure n static levels removed. -\&"LXA~n" finds the (virtual) AB. -The value used for static link is LB. -.PP -When a procedure needing a static link is called, first the actual -parameters are pushed, then the static link is pushed using LXL -and finally the procedure is called with a CAL with the procedure's -name as argument. -.br -.ne 40 -.nf - - - - |===============================| - | actual argument n | - |-------------------------------| - | . | - | . | - | . | - |-------------------------------| - | actual argument 1 | - |-------------------------------| - | static link | ( <- AB ) - |===============================| - |///////////////////////////////| - |// implementation dependent //| - |///////////////////////////////| <- LB - |===============================| - | | - | local variables | - | | - |-------------------------------| - | | - | compiler temporaries | - | | - |===============================| - |///////////////////////////////| - |// implementation dependent //| - |///////////////////////////////| - |===============================| - | | - | dynamic local generators | - | | - |===============================| - | operand | - |-------------------------------| - | operand | <- SP - |===============================| - - A procedure frame with static link. - -.fi -.sp 1 -.sp 1 -.PP -Pascal and other languages have to use procedure -instance identifiers containing -the procedure identifier -'ul -and -the static link the procedure has to be called with. -A static link having a value of zero signals -that the called procedure does not need a static link. -C uses the same convention for pointers to C-routines. -In pointers to C-routines the static link is set to zero. -.PP -Note: The distance from LB to AB must be known for each procedure, otherwise -LXA can not be implemented. -Most implementations will have a fixed size area between -the parameter and local storage. -The zone between the compiler temporaries and the dynamic -local generators can be used -to save a variable number of registers. -.PP -.ne 11 -Prolog examples: -.sp 2 -.nf - - proc1 proc2 - - mov lb,-(sp) mov lb,-(sp) - mov sp,lb mov sp,lb - sub $loc_size,sp sub $loc_size,sp - mov r2,-(sp) ; save r2 mov r2,-(sp) - mov r4,-(sp) ; save r4 - -.fi -.SB "Return values" -.PP -The return value popped by RET is stored in an unnamed 'function return area'. -This area can be different for different sized objects returned, -e.g. one register for two byte objects, -two registers for four byte objects, -memory for larger objects. -The area is available for 'READ-ONCE' access using the LFR instruction. -The result of a LFR is only defined if the sizes used to store and -fetch are identical. -The only instructions guaranteed not to destroy the contents of -any 'function return area' are ASP and BRA. -Thus parameters can be popped before fetching the function result. -The maximum size of all function return areas is -implementation dependant, -but allows procedure instance identifiers and all -implemented objects of type integer, unsigned, float -and pointer to be returned. - -.SE "EM Assembly Language" -.nr b 0 1 -.SB "Object types and instructions" -.PP -EM knows five basic object types: -pointers, -signed integers, -unsigned integers, -floating point numbers and -sets of bits. -Operations on objects of the last four types do not assume -a specific size. -Pointers (including procedure identifiers) have a fixed size in each -implementation. -Instructions acting on one or more objects of the last four types need -explicit size information. -This information can be given either as the argument of the -instruction or on top of the stack. -.sp 1 -For example: -.nf -addition of integers LOL a, LOL b, ADI 2 -subtraction of two floats LDL a, LDL b, SBF 4 -integer to float LOL a, LOC 2, LOC 4, CIF, SDL b -.fi -.sp -Note that conversion instructions always expect size -before and size after conversion on the stack. -.sp -No obligation exists to implement all operations on all possible sizes. -.PP -The EM assembly language -allows constants as instruction arguments up to a size of four bytes. -In all EM's it is possible to initialize any type and size object. -BSS, HOL, CON and ROM allow type and size indication in initializers. -.SB "Conversion instructions" -.PP -The conversion operators can convert from any type and size to any -type and size. -The types are specified by the instruction, -the sizes should be in words on top of the stack. -Normally the sizes are multiples of the word size, -There is one exception: the CII instructions sign-extends if the -size of the source is a divisor of the word size. -.SB "CSA and CSB" -.PP -The tables used by these instructions do not contain the procedure -identifier any more. -See also "Descriptors". -.SB EXG -.PP -The EXG instruction is deleted from the EM instruction set. -If future applications show any need for this instruction, -it will be added again. -.SB "FIL" -.PP -A FIL instruction has been introduced. -When using separate compilation, -the LIN feature of EM was insufficient. -FIL expects as argument an address in global data. -This address is stored in a fixed place in memory, -where it can be used by any implementation for diagnostics etc. -Like LIN, it provides access to the ABS fragment at the start -of external data. -.SB "LAI and SAI" -.PP -LAI and SAI have been dropped, they thwarted register optimization. -.SB LNC -.PP -The LNC instruction is deleted from the instruction set. -LOC -n wil do what it is supposed to. -.SB "Branch instructions" -.PP -The branch instructions are allowed to branch both forward and backward. -Consequently BRF and BRB are deleted and a BRA instruction is added. -BRA branches unconditionally in any direction. -.SB LDC -.PP -Loads a double word constant on the stack. -.SB LEX -.PP -LXA and LXL replace LEX. -.SB LFR -.PP -LFR loads the function result stored by RET. -.SB "LIL and SIL" -.PP -They replace LOP and STP. (Name change only) -.SB "Traps and Interrupts" -.PP -The numbers used for distinguishing the various types -of traps and interrupts have been reassigned. -The new instructions LIM and SIM -allow setting and clearing of bits in a mask. -The bits in the mask control the action taken upon encountering certain -errors at runtime. -A 1 bit causes the corresponding error to be ignored, -a 0 bit causes the run-time system to trap. -.SB LPI -.PP -Loads a procedure identifier on the stack. -LOC cannot be used to do this anymore. -.SB "ZER and ZRF" -.PP -ZER loads S zero bytes on the stack. -ZRF loads a floating point zero of size S. -.SB "Descriptors" -.PP -All instructions using descriptors have the size of the integer used -in the descriptor as argument. -The descriptors are: case descriptors (CSA and CSB), -range check descriptors (RCK) and -array descriptors ( LAR, SAR, AAR). -.SB "Case descriptors" -.PP -The value used in a case descriptor to indicate the absence of a label -is zero instead of -1. -.SE "EM assembly language" -.SB "Instruction arguments" -.PP -The previous EM had different instructions for distinguishing -between operand on the stack and explicit argument in the instruction. -For example, LOI and LOS. -This distinction has been removed. -Several instructions have two possible forms: -with explicit argument and with implicit argument on top of the stack. -The size of the implicit argument is the word size. -The implicit argument is always popped before all other operands. -Appendix 1 shows what is allowed for each instruction. -.SB Notation -.PP -First the notation used for the arguments of -instructions and pseudo instructions. -.in +12 -.ti -11 -~~=~~an integer number in the range -32768..32767 -.ti -11 -~~=~~an offset -2**31..2**31~-~1 -.ti -11 -~~=~~an identifier -.ti -11 -~~=~~ or or + or - -.ti -11 -~~=~~integer constant, -unsigned constant, -floating point constant -.ti -11 -~~=~~string constant (surrounded by double quotes), -.ti -11 -~~=~~instruction label ('*' followed by an integer in the range -0..32767). -.ti -11 -~~=~~procedure number ('$' followed by a procedure name) -.ti -11 -~~=~~, -, - or -. -.ti -11 -<...>*~=~~zero or more of <...> -.ti -11 -<...>+~=~~one or more of <...> -.ti -11 -[...]~~=~~optional ... -.in -12 -.SB Labels -.PP -No label, instruction or data, can have a (pseudo) instruction -on the same line. -.SB Constants -.PP -All constants in EM are interpreted in the decimal base. -.PP -In BSS, HOL, CON and ROM pseudo-instructions -numbers must be followed by I, U or F -indicating Integer, Unsigned or Float. -If no character is present I is assumed. -This character can be followed by an even positive number or a 1. -The number indicates the size in bytes of the object to be initialized, -up to 32766. -Double precision integers can no longer be indicated by a trailing L. -As said before CON and ROM also allow expressions of the form: -\&"LABEL+offset" and "LABEL-offset". -The offset must be an unsigned decimal number. -The 'IUF' indicators cannot be used with the offsets. -.PP -Areas reserved in the global data area by HOL or BSS can be -initialized. -BSS and HOL have a third parameter indicating whether the initialization -is mandatory or optional. -.PP -Since EM needs aligment of objects, this alignment is enforced by the -pseudo instructions. -All objects are aligned on a multiple of their size or the word size -whichever is smaller. -Switching to another type of fragment or placing a label forces word-alignment. -There are three types of fragments in global data space: CON, ROM and BSS-HOL. -.sp -.SB "Pseudo instructions" -.PP -The LET, IMC and FWC pseudo's have disappeared. -The only application of these pseudo's was in postponing the -specification of the size of the local storage to just before -the END of the procedure. -A new mechanism has been introduced to handle this problem. -.ti +5 -The pseudos involved in separate compilation and linking have -been reorganized. -.ti +5 -PRO and END are altered and reflect the new calling sequence. -EOF has disappeared. -.ti +5 -BSS and HOL allow initialization of the requested data areas. -.sp 2 -Four pseudo instructions request global data: -.sp 2 - BSS ,, -.IN -Reserve bytes. - is the value used to initialize the area. - must be a multiple of the size of . - is 0 if the initialization is not strictly necessary, -1 otherwise. -.OU -.sp - HOL ,, -.IN -Idem, but all following absolute global data references will -refer to this block. -Only one HOL is allowed per procedure, -it has to be placed before the first instruction. -.OU -.sp - CON + -.IN -Assemble global data words initialized with the constants. -.OU -.sp - ROM + -.IN -Idem, but the initialized data will never be changed by the program. -.OU -.sp 2 -Two pseudo instructions partition the input into procedures: -.sp 2 - PRO [,] -.IN -Start of procedure. - is the procedure name. - is the number of bytes for locals. -The number of bytes for locals must be specified in the PRO or -END pseudo-instruction. -When specified in both, they must be identical. -.OU -.sp - END [] -.IN -End of Procedure. - is the number of bytes for locals. -The number of bytes for locals must be specified in either the PRO or -END pseudo-instruction or both. -.OU -.PP -Names of data and procedures in a EM module can either be -internal or external. -External names are known outside the module and are used to link -several pieces of a program. -Internal names are not known outside the modules they are used in. -Other modules will not 'see' an internal name. -.ti +5 -In order to reduce the number of passes needed, -it must be known at the first occurrence whether -a name is internal or external. -If the first occurrence of a name is in a definition, -the name is considered to be internal. -If the first occurrence of a name is a reference, -the name is considered to be external. -If the first occurrence is in one of the following pseudo instructions, -the effect of the pseudo has precedence. -.sp 2 - EXA -.IN -External name. - is external to this module. -Note that may be defined in the same module. -.OU -.sp - EXP -.IN -External procedure identifier. -Note that may be defined in the same module. -.OU -.sp - INA -.IN -Internal name. - is internal to this module and must be defined in this module. -.OU -.sp - INP -.IN -Internal procedure. - is internal to this module and must be defined in this module. -.OU -.sp 2 -Two other pseudo instructions provide miscellaneous features: -.sp 2 - EXC , -.IN -Two blocks of instructions preceding this one are -interchanged before being processed. - gives the number of lines of the first block. - gives the number of lines of the second one. -Blank and pure comment lines do not count. -This instruction is obsolete. Its use is strongly discouraged. -.OU -.sp - MES ,* -.IN -A special type of comment. Used by compilers to communicate with the -optimizer, assembler, etc. as follows: -.br - MES 0 - -.IN -An error has occurred, stop further processing. -.OU -.br - MES 1 - -.IN -Suppress optimization -.OU -.br - MES 2,, -.IN -Use word-size and pointer size . -.OU -.br - MES 3,,, - -.IN -Indicates that a local variable is never referenced indirectly. - is offset in bytes from LB if positive -and offset from AB if negative. - gives the size of the variable. - indicates the class of the variable. -.OU -.br - MES 4,, -.IN -Number of source lines in file (for profiler). -.OU -.br - MES 5 - -.IN -Floating point used. -.OU -.br - MES 6,* - -.IN -Comment. Used to provide comments in compact assembly language (see below). -.OU -.sp 1 -Each back end is free to skip irrelevant MES pseudos. -.OU -.SB "The Compact Assembly Language" -.PP -The assembler accepts input in a highly encoded form. This -form is intended to reduce the amount of file transport between the compiler -and assembler, and also reduce the amount of storage required for storing -libraries. -Libraries are stored as archived compact assembly language, not machine language. -.PP -When beginning to read the input, the assembler is in neutral state, and -expects either a label or an instruction (including the pseudoinstructions). -The meaning of the next byte(s) when in neutral state is as follows, where b1, b2 -etc. represent the succeeding bytes. -.sp - 0 Reserved for future use - 1-129 Machine instructions, see Appendix 2, alphabetical list - 130-149 Reserved for future use - 150-161 BSS,CON,END,EXC,EXA,EXP,HOL,INA,INP,MES,PRO,ROM - 162-179 Reserved for future pseudoinstructions - 180-239 Instruction labels 0 - 59 (180 is local label 0 etc.) - 240-244 See the Common Table below - 245-255 Not used - -After a label, the assembler is back in neutral state; it can immediately -accept another label or an instruction in the very next byte. There are -no linefeeds used to separate lines. -.PP -If an opcode expects no arguments, -the assembler is back in neutral state after -reading the one byte containing the instruction number. If it has one or -more arguments (only pseudos have more than 1), the arguments follow directly, -encoded as follows: -.sp - 0-239 Offsets from -120 to 119 -.br - 240-255 See the Common Table below -.sp 2 -If an opcode has one optional argument, -a special byte is used to announce that the argument is not present. -.ce 1 -Common Table for Neutral State and Arguments -.sp -.nf - 240 b1 Instruction label b1 (Not used for branches) - 241 b1 b2 16 bit instruction label (256*b2 + b1) - 242 b1 Global label .0-.255, with b1 being the label - 243 b1 b2 Global label .0-.32767 - with 256*b2+b1 being the label - 244 Global symbol not of the form .nnn -. \" Only the previous can occur in neutral state. - 245 b1 b2 (16 bit constant) 256*b2+b1 - 246 b1 b2 b3 b4 (32 bit constant) (256*(256*(256*b4)+b3)+b2)+b1 - 247 Global label + (possibly negative) constant - 248 Procedure name (not including $) - 249 String used in CON or ROM (no quotes) - 250 Integer constant, size bytes - 251 Unsigned constant, size bytes - 252 Floating constant, size bytes - 255 Delimiter for argument lists or - indicates absence of optional argument - -.fi -.PP -The notation consists first of a length field, and then an -arbitrary string of bytes. -The length is specified by a . -.PP -.ne 8 -The pseudoinstructions fall into several categories, depending on their -arguments: -.sp - Group 1 -- EXC, BSS, HOL have a known number of arguments - Group 2 -- EXA, EXP, INA, INP start with a string - Group 3 -- CON, MES, ROM have a variable number of various things - Group 4 -- END, PRO have a trailing optional argument. - -Groups 1 and 2 -use the encoding described above. -Group 3 also uses the encoding listed above, with a byte after the -last argument to indicate the end of the list. -Group 4 uses -a byte if the trailing argument is not present. - -.ad -.fi -.sp 2 -.ne 12 -.nf -Example ASCII Example compact -(LOC = 66, BRA = 18 here): - - 2 182 - 1 181 - LOC 10 66 130 - LOC -10 66 110 - LOC 300 66 245 44 1 - BRA 19 18 139 - 300 241 44 1 - .3 242 3 - CON 4,9,*2,$foo 151 124 130 240 2 248 3 102 111 111 255 - LOC .35 66 242 35 -.fi -.nr a 0 1 -.SE "ASSEMBLY LANGUAGE INSTRUCTION LIST" -.PP -For each instruction in the list the range of operand values -in the assembly language is given. -All constants, offsets and sizes are in the range -2**31~..~2**31-1. -The column headed \fIassem\fP contains the mnemonics defined -in 4.1. -The following column indicates restrictions in the range of the operand. -Addresses have to obey the restrictions mentioned in chapter 2 - Memory -. -The size parameter of most instructions has to be a multiple -of the word size. -The classes of operands -are indicated by letters: -.ds b \fBb\fP -.ds c \fBc\fP -.ds d \fBd\fP -.ds g \fBg\fP -.ds f \fBf\fP -.ds l \fBl\fP -.ds n \fBn\fP -.ds i \fBi\fP -.ds p \fBp\fP -.ds r \fBr\fP -.ds s \fBs\fP -.ds z \fBz\fP -.ds - \fB-\fP -.nf - - \fIassem\fP constraints rationale - -\&\*c off 1-word constant -\&\*d off 2-word constant -\&\*l off local offset -\&\*g arg >= 0 global offset -\&\*f off fragment offset -\&\*n num >= 0 counter -\&\*s off > 0 object size -\&\*z off >= 0 object size -\&\*i off > 0 object size * -\&\*p pro pro identifier -\&\*b lab >= 0 label number -\&\*r num 0,1,2 register number -\&\*- no operand - -.fi -.PP -The * at the rationale for \*i indicates that the operand -can either be given as argument or on top of the stack. -If the operand has to be fetched from the stack, -it is assumed to be a word-sized unsigned integer. -.PP -Instructions that check for undefined operands and underflow or overflow -are indicated by (*). -.nf - -GROUP 1 - LOAD - - LOC \*c : Load constant (i.e. push one word onto the stack) - LDC \*d : Load double constant ( push two words ) - LOL \*l : Load word at \*l-th local (l<0) or parameter (l>=0) - LOE \*g : Load external word \*g - LIL \*l : Load word pointed to by \*l-th local or parameter - LOF \*f : Load offsetted. (top of stack + \*f yield address) - LAL \*l : Load address of local or parameter - LAE \*g : Load address of external - LXL \*n : Load lexical. (address of LB \*n static levels back) - LXA \*n : Load lexical. (address of AB \*n static levels back) - LOI \*s : Load indirect \*s bytes (address is popped from the stack) - LOS \*i : Load indirect. \*i-byte integer on top of stack gives object size - LDL \*l : Load double local or parameter (two consecutive words are stacked) - LDE \*g : Load double external (two consecutive externals are stacked) - LDF \*f : Load double offsetted (top of stack + \*f yield address) - LPI \*p : Load procedure identifier - -GROUP 2 - STORE - - STL \*l : Store local or parameter - STE \*g : Store external - SIL \*l : Store into word pointed to by \*l-th local or parameter - STF \*f : Store offsetted - STI \*s : Store indirect \*s bytes (pop address, then data) - STS \*i : Store indirect. \*i-byte integer on top of stack gives object size - SDL \*l : Store double local or parameter - SDE \*g : Store double external - SDF \*f : Store double offsetted - -GROUP 3 - INTEGER ARITHMETIC - - ADI \*i : Addition (*) - SBI \*i : Subtraction (*) - MLI \*i : Multiplication (*) - DVI \*i : Division (*) - RMI \*i : Remainder (*) - NGI \*i : Negate (two's complement) (*) - SLI \*i : Shift left (*) - SRI \*i : Shift right (*) - -GROUP 4 - UNSIGNED ARITHMETIC - - ADU \*i : Addition - SBU \*i : Subtraction - MLU \*i : Multiplication - DVU \*i : Division - RMU \*i : Remainder - SLU \*i : Shift left - SRU \*i : Shift right - -GROUP 5 - FLOATING POINT ARITHMETIC (Format not defined) - - ADF \*i : Floating add (*) - SBF \*i : Floating subtract (*) - MLF \*i : Floating multiply (*) - DVF \*i : Floating divide (*) - NGF \*i : Floating negate (*) - FIF \*i : Floating multiply and split integer and fraction part (*) - FEF \*i : Split floating number in exponent and fraction part (*) - -GROUP 6 - POINTER ARITHMETIC - - ADP \*f : Add \*c to pointer on top of stack - ADS \*i : Add \*i-byte value and pointer - SBS \*i : Subtract pointers in same fragment and push diff as size \*i integer - -GROUP 7 - INCREMENT/DECREMENT/ZERO - - INC \*- : Increment top of stack by 1 (*) - INL \*l : Increment local or parameter (*) - INE \*g : Increment external (*) - DEC \*- : Decrement top of stack by 1 (*) - DEL \*l : Decrement local or parameter (*) - DEE \*g : Decrement external (*) - ZRL \*l : Zero local or parameter - ZRE \*g : Zero external - ZRF \*i : Load a floating zero of size \*i - ZER \*i : Load \*i zero bytes - -GROUP 8 - CONVERT ( stack: source, source size, dest. size (top) ) - - CII \*- : Convert integer to integer (*) - CUI \*- : Convert unsigned to integer (*) - CFI \*- : Convert floating to integer (*) - CIF \*- : Convert integer to floating (*) - CUF \*- : Convert unsigned to floating (*) - CFF \*- : Convert floating to floating (*) - CIU \*- : Convert integer to unsigned - CUU \*- : Convert unsigned to unsigned - CFU \*- : Convert floating to unsigned - -GROUP 9 - LOGICAL - - AND \*i : Boolean and on two groups of \*i bytes - IOR \*i : Boolean inclusive or on two groups of \*i bytes - XOR \*i : Boolean exclusive or on two groups of \*i bytes - COM \*i : Complement (one's complement of top \*i bytes) - ROL \*i : Rotate left a group of \*i bytes - ROR \*i : Rotate right a group of \*i bytes - -GROUP 10 - SETS - - INN \*i : Bit test on \*i byte set (bit number on top of stack) - SET \*i : Create singleton \*i byte set with bit n on (n is top of stack) - -GROUP 11 - ARRAY - - LAR \*i : Load array element, descriptor contains integers of size \*i - SAR \*i : Store array element - AAR \*i : Load address of array element - -GROUP 12 - COMPARE - - CMI \*i : Compare \*i byte integers. Push negative, zero, positive for <, = or > - CMF \*i : Compare \*i byte reals - CMU \*i : Compare \*i byte unsigneds - CMS \*i : Compare \*i byte sets. can only be used for equality test. - CMP \*- : Compare pointers - - TLT \*- : True if less, i.e. iff top of stack < 0 - TLE \*- : True if less or equal, i.e. iff top of stack <= 0 - TEQ \*- : True if equal, i.e. iff top of stack = 0 - TNE \*- : True if not equal, i.e. iff top of stack non zero - TGE \*- : True if greater or equal, i.e. iff top of stack >= 0 - TGT \*- : True if greater, i.e. iff top of stack > 0 - -GROUP 13 - BRANCH - - BRA \*b : Branch unconditionally to label \*b - - BLT \*b : Branch less (pop 2 words, branch if top > second) - BLE \*b : Branch less or equal - BEQ \*b : Branch equal - BNE \*b : Branch not equal - BGE \*b : Branch greater or equal - BGT \*b : Branch greater - - ZLT \*b : Branch less than zero (pop 1 word, branch negative) - ZLE \*b : Branch less or equal to zero - ZEQ \*b : Branch equal zero - ZNE \*b : Branch not zero - ZGE \*b : Branch greater or equal zero - ZGT \*b : Branch greater than zero - -GROUP 14 - PROCEDURE CALL - - CAI \*- : Call procedure (procedure instance identifier on stack) - CAL \*p : Call procedure (with name \*p) - LFR \*s : Load function result - RET \*z : Return (function result consists of top \*z bytes) - -GROUP 15 - MISCELLANEOUS - - ASP \*f : Adjust the stack pointer by \*f - ASS \*i : Adjust the stack pointer by \*i-byte integer - BLM \*z : Block move \*z bytes; first pop destination addr, then source addr - BLS \*i : Block move, size is in \*i-byte integer on top of stack - CSA \*i : Case jump; address of jump table at top of stack - CSB \*i : Table lookup jump; address of jump table at top of stack - DUP \*s : Duplicate top \*s bytes - DUS \*i : Duplicate top \*i bytes - FIL \*g : File name (external 4 := \*g) - LIM \*- : Load 16 bit ignore mask - LIN \*n : Line number (external 0 := \*n) - LNI \*- : Line number increment - LOR \*r : Load register (0=LB, 1=SP, 2=HP) - MON \*- : Monitor call - NOP \*- : No operation - RCK \*i : Range check; trap on error - RTT \*- : Return from trap - SIG \*- : Trap errors to proc nr on top of stack (-2 resets default). Static - link of procedure is below procedure number. Old values returned - SIM \*- : Store 16 bit ignore mask - STR \*r : Store register (0=LB, 1=SP, 2=HP) - TRP \*- : Cause trap to occur (Error number on stack) -.fi diff --git a/doc/em/app.int.nr b/doc/em/app.int.nr deleted file mode 100644 index 26dd3a7c6..000000000 --- a/doc/em/app.int.nr +++ /dev/null @@ -1,11 +0,0 @@ -.BP -.AP "EM INTERPRETER" -.nf -.ft CW -.lg 0 -.nr x \w' ' -.ta \nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu -.so em.i -.ft P -.lg 1 -.fi diff --git a/doc/em/app.nr b/doc/em/app.nr deleted file mode 100644 index 78e082fcc..000000000 --- a/doc/em/app.nr +++ /dev/null @@ -1,488 +0,0 @@ -.BP -.AP "EM INTERPRETER" -.nf -.ta 8 16 24 32 40 48 56 64 72 80 -.so em.i -.fi -.BP -.AP "EM CODE TABLES" -The following table is used by the assembler for EM machine -language. -It specifies the opcodes used for each instruction and -how arguments are mapped to machine language arguments. -The table is presented in three columns, -each line in each column contains three or four fields. -Each line describes a range of interpreter opcodes by -specifying for which instruction the range is used, the type of the -opcodes (mini, shortie, etc..) and range for the instruction -argument. -.A -The first field on each line gives the EM instruction mnemonic, -the second field gives some flags. -If the opcodes are minis or shorties the third field specifies -how many minis/shorties are used. -The last field gives the number of the (first) interpreter -opcode. -.N 1 -Flags : -.IS 3 -.N 1 -Opcode type, only one of the following may be specified. -.PS - 5 " " -.PT - -opcode without argument -.PT m -mini -.PT s -shortie -.PT 2 -opcode with 2-byte signed argument -.PT 4 -opcode with 4-byte signed argument -.PT 8 -opcode with 8-byte signed argument -.PE -Secondary (escaped) opcodes. -.PS - 5 " " -.PT e -The opcode thus marked is in the secondary opcode group instead -of the primary -.PE -restrictions on arguments -.PS - 5 " " -.PT N -Negative arguments only -.PT P -Positive and zero arguments only -.PE -mapping of arguments -.PS - 5 " " -.PT w -argument must be divisible by the wordsize and is divided by the -wordsize before use as opcode argument. -.PT o -argument ( possibly after division ) must be >= 1 and is -decremented before use as opcode argument -.PE -.IE -If the opcode type is 2,4 or 8 the resulting argument is used as -opcode argument (least significant byte first). -.N -If the opcode type is mini, the argument is added -to the first opcode - if in range - . -If the argument is negative, the absolute value minus one is -used in the algorithm above. -.N -For shorties with positive arguments the first opcode is used -for arguments in the range 0..255, the second for the range -256..511, etc.. -For shorties with negative arguments the first opcode is used -for arguments in the range -1..-256, the second for the range --257..-512, etc.. -The byte following the opcode contains the least significant -byte of the argument. -First some examples of these specifications. -.PS - 5 -.PT "aar mwPo 1 34" -Indicates that opcode 34 is used as a mini for Positive -instruction arguments only. -The w and o indicate division and decrementing of the -instruction argument. -Because the resulting argument must be zero ( only opcode 34 may be used -), this mini can only be used for instruction argument 2. -Conclusion: opcode 34 is for "AAR 2". -.PT "adp sP 1 41" -Opcode 41 is used as shortie for ADP with arguments in the range -0..255. -.PT "bra sN 2 60" -Opcode 60 is used as shortie for BRA with arguments -1..-256, -61 is used for arguments -257..-512. -.PT "zer e- 145" -Escaped opcode 145 is used for ZER. -.PE -The interpreter opcode table: -.N 1 -.IS 3 -.DS B -.so itables -.DE 0 -.IE -.P -The table above results in the following dispatch tables. -Dispatch tables are used by interpreters to jump to the -routines implementing the EM instructions, indexed by the next opcode. -Each line of the dispatch tables gives the routine names -of eight consecutive opcodes, preceded by the first opcode number -on that line. -Routine names consist of an EM mnemonic followed by a suffix. -The suffices show the encoding used for each opcode. -.N -The following suffices exist: -.N 1 -.VS 1 0 -.IS 4 -.PS - 11 -.PT .z -no arguments -.PT .l -16-bit argument -.PT .lw -16-bit argument divided by the wordsize -.PT .p -positive 16-bit argument -.PT .pw -positive 16-bit argument divided by the wordsize -.PT .n -negative 16-bit argument -.PT .nw -negative 16-bit argument divided by the wordsize -.PT .s -shortie with as high order argument byte -.PT .sw -shortie with argument divided by the wordsize -.PT . -mini with as argument -.PT .W -mini with *wordsize as argument -.PE 3 - is a possibly negative integer. -.VS 1 1 -.IE -The dispatch table for the 256 primary opcodes: -.DS B - 0 loc.0 loc.1 loc.2 loc.3 loc.4 loc.5 loc.6 loc.7 - 8 loc.8 loc.9 loc.10 loc.11 loc.12 loc.13 loc.14 loc.15 - 16 loc.16 loc.17 loc.18 loc.19 loc.20 loc.21 loc.22 loc.23 - 24 loc.24 loc.25 loc.26 loc.27 loc.28 loc.29 loc.30 loc.31 - 32 loc.32 loc.33 aar.1W adf.s0 adi.1W adi.2W adp.l adp.1 - 40 adp.2 adp.s0 adp.s-1 ads.1W and.1W asp.1W asp.2W asp.3W - 48 asp.4W asp.5W asp.w0 beq.l beq.s0 bge.s0 bgt.s0 ble.s0 - 56 blm.s0 blt.s0 bne.s0 bra.l bra.s-1 bra.s-2 bra.s0 bra.s1 - 64 cal.1 cal.2 cal.3 cal.4 cal.5 cal.6 cal.7 cal.8 - 72 cal.9 cal.10 cal.11 cal.12 cal.13 cal.14 cal.15 cal.16 - 80 cal.17 cal.18 cal.19 cal.20 cal.21 cal.22 cal.23 cal.24 - 88 cal.25 cal.26 cal.27 cal.28 cal.s0 cff.z cif.z cii.z - 96 cmf.s0 cmi.1W cmi.2W cmp.z cms.s0 csa.1W csb.1W dec.z - 104 dee.w0 del.w-1 dup.1W dvf.s0 dvi.1W fil.l inc.z ine.lw - 112 ine.w0 inl.-1W inl.-2W inl.-3W inl.w-1 inn.s0 ior.1W ior.s0 - 120 lae.l lae.w0 lae.w1 lae.w2 lae.w3 lae.w4 lae.w5 lae.w6 - 128 lal.p lal.n lal.0 lal.-1 lal.w0 lal.w-1 lal.w-2 lar.W - 136 ldc.0 lde.lw lde.w0 ldl.0 ldl.w-1 lfr.1W lfr.2W lfr.s0 - 144 lil.w-1 lil.w0 lil.0 lil.1W lin.l lin.s0 lni.z loc.l - 152 loc.-1 loc.s0 loc.s-1 loe.lw loe.w0 loe.w1 loe.w2 loe.w3 - 160 loe.w4 lof.l lof.1W lof.2W lof.3W lof.4W lof.s0 loi.l - 168 loi.1 loi.1W loi.2W loi.3W loi.4W loi.s0 lol.pw lol.nw - 176 lol.0 lol.1W lol.2W lol.3W lol.-1W lol.-2W lol.-3W lol.-4W - 184 lol.-5W lol.-6W lol.-7W lol.-8W lol.w0 lol.w-1 lxa.1 lxl.1 - 192 lxl.2 mlf.s0 mli.1W mli.2W rck.1W ret.0 ret.1W ret.s0 - 200 rmi.1W sar.1W sbf.s0 sbi.1W sbi.2W sdl.w-1 set.s0 sil.w-1 - 208 sil.w0 sli.1W ste.lw ste.w0 ste.w1 ste.w2 stf.l stf.W - 216 stf.2W stf.s0 sti.1 sti.1W sti.2W sti.3W sti.4W sti.s0 - 224 stl.pw stl.nw stl.0 stl.1W stl.-1W stl.-2W stl.-3W stl.-4W - 232 stl.-5W stl.w-1 teq.z tgt.z tlt.z tne.z zeq.l zeq.s0 - 240 zeq.s1 zer.s0 zge.s0 zgt.s0 zle.s0 zlt.s0 zne.s0 zne.s-1 - 248 zre.lw zre.w0 zrl.-1W zrl.-2W zrl.w-1 zrl.nw escape1 escape2 -.DE 2 -The list of secondary opcodes (escape1): -.N 1 -.DS B - 0 aar.l aar.z adf.l adf.z adi.l adi.z ads.l ads.z - 8 adu.l adu.z and.l and.z asp.lw ass.l ass.z bge.l - 16 bgt.l ble.l blm.l bls.l bls.z blt.l bne.l cai.z - 24 cal.l cfi.z cfu.z ciu.z cmf.l cmf.z cmi.l cmi.z - 32 cms.l cms.z cmu.l cmu.z com.l com.z csa.l csa.z - 40 csb.l csb.z cuf.z cui.z cuu.z dee.lw del.pw del.nw - 48 dup.l dus.l dus.z dvf.l dvf.z dvi.l dvi.z dvu.l - 56 dvu.z fef.l fef.z fif.l fif.z inl.pw inl.nw inn.l - 64 inn.z ior.l ior.z lar.l lar.z ldc.l ldf.l ldl.pw - 72 ldl.nw lfr.l lil.pw lil.nw lim.z los.l los.z lor.s0 - 80 lpi.l lxa.l lxl.l mlf.l mlf.z mli.l mli.z mlu.l - 88 mlu.z mon.z ngf.l ngf.z ngi.l ngi.z nop.z rck.l - 96 rck.z ret.l rmi.l rmi.z rmu.l rmu.z rol.l rol.z - 104 ror.l ror.z rtt.z sar.l sar.z sbf.l sbf.z sbi.l - 112 sbi.z sbs.l sbs.z sbu.l sbu.z sde.l sdf.l sdl.pw - 120 sdl.nw set.l set.z sig.z sil.pw sil.nw sim.z sli.l - 128 sli.z slu.l slu.z sri.l sri.z sru.l sru.z sti.l - 136 sts.l sts.z str.s0 tge.z tle.z trp.z xor.l xor.z - 144 zer.l zer.z zge.l zgt.l zle.l zlt.l zne.l zrf.l - 152 zrf.z zrl.pw dch.z exg.s0 exg.l exg.z lpb.z gto.l -.DE 2 -Finally, the list of opcodes with four byte arguments (escape2). -.DS - - 0 loc -.DE 0 -.BP -.AP "AN EXAMPLE PROGRAM" -.DS B - 1 program example(output); - 2 {This program just demonstrates typical EM code.} - 3 type rec = record r1: integer; r2:real; r3: boolean end; - 4 var mi: integer; mx:real; r:rec; - 5 - 6 function sum(a,b:integer):integer; - 7 begin - 8 sum := a + b - 9 end; -10 -11 procedure test(var r: rec); -12 label 1; -13 var i,j: integer; -14 x,y: real; -15 b: boolean; -16 c: char; -17 a: array[1..100] of integer; -18 -19 begin -20 j := 1; -21 i := 3 * j + 6; -22 x := 4.8; -23 y := x/0.5; -24 b := true; -25 c := 'z'; -26 for i:= 1 to 100 do a[i] := i * i; -27 r.r1 := j+27; -28 r.r3 := b; -29 r.r2 := x+y; -30 i := sum(r.r1, a[j]); -31 while i > 0 do begin j := j + r.r1; i := i - 1 end; -32 with r do begin r3 := b; r2 := x+y; r1 := 0 end; -33 goto 1; -34 1: writeln(j, i:6, x:9:3, b) -35 end; {test} -36 begin {main program} -37 mx := 15.96; -38 mi := 99; -39 test(r) -40 end. -.DE 0 -.BP -The EM code as produced by the Pascal-VU compiler is given below. Comments -have been added manually. Note that this code has already been optimized. -.DS B - mes 2,2,2 ; wordsize 2, pointersize 2 - .1 - rom 't.p\e000' ; the name of the source file - hol 552,-32768,0 ; externals and buf occupy 552 bytes - exp $sum ; sum can be called from other modules - pro $sum,2 ; procedure sum; 2 bytes local storage - lin 8 ; code from source line 8 - ldl 0 ; load two locals ( a and b ) - adi 2 ; add them - ret 2 ; return the result - end 2 ; end of procedure ( still two bytes local storage ) - .2 - rom 1,99,2 ; descriptor of array a[] - exp $test ; the compiler exports all level 0 procedures - pro $test,226 ; procedure test, 226 bytes local storage - .3 - rom 4.8F8 ; assemble Floating point 4.8 (8 bytes) in - .4 ; global storage - rom 0.5F8 ; same for 0.5 - mes 3,-226,2,2 ; compiler temporary not referenced by address - mes 3,-24,2,0 ; the same is true for i, j, b and c in test - mes 3,-22,2,0 - mes 3,-4,2,0 - mes 3,-2,2,0 - mes 3,-20,8,0 ; and for x and y - mes 3,-12,8,0 - lin 20 ; maintain source line number - loc 1 - stl -4 ; j := 1 - lni ; lin 21 prior to optimization - lol -4 - loc 3 - mli 2 - loc 6 - adi 2 - stl -2 ; i := 3 * j + 6 - lni ; lin 22 prior to optimization - lae .3 - loi 8 - lal -12 - sti 8 ; x := 4.8 - lni ; lin 23 prior to optimization - lal -12 - loi 8 - lae .4 - loi 8 - dvf 8 - lal -20 - sti 8 ; y := x / 0.5 - lni ; lin 24 prior to optimization - loc 1 - stl -22 ; b := true - lni ; lin 25 prior to optimization - loc 122 - stl -24 ; c := 'z' - lni ; lin 26 prior to optimization - loc 1 - stl -2 ; for i:= 1 - 2 - lol -2 - dup 2 - mli 2 ; i*i - lal -224 - lol -2 - lae .2 - sar 2 ; a[i] := - lol -2 - loc 100 - beq *3 ; to 100 do - inl -2 ; increment i and loop - bra *2 - 3 - lin 27 - lol -4 - loc 27 - adi 2 ; j + 27 - sil 0 ; r.r1 := - lni ; lin 28 prior to optimization - lol -22 ; b - lol 0 - stf 10 ; r.r3 := - lni ; lin 29 prior to optimization - lal -20 - loi 16 - adf 8 ; x + y - lol 0 - adp 2 - sti 8 ; r.r2 := - lni ; lin 23 prior to optimization - lal -224 - lol -4 - lae .2 - lar 2 ; a[j] - lil 0 ; r.r1 - cal $sum ; call now - asp 4 ; remove parameters from stack - lfr 2 ; get function result - stl -2 ; i := - 4 - lin 31 - lol -2 - zle *5 ; while i > 0 do - lol -4 - lil 0 - adi 2 - stl -4 ; j := j + r.r1 - del -2 ; i := i - 1 - bra *4 ; loop - 5 - lin 32 - lol 0 - stl -226 ; make copy of address of r - lol -22 - lol -226 - stf 10 ; r3 := b - lal -20 - loi 16 - adf 8 - lol -226 - adp 2 - sti 8 ; r2 := x + y - loc 0 - sil -226 ; r1 := 0 - lin 34 ; note the abscence of the unnecesary jump - lae 22 ; address of output structure - lol -4 - cal $_wri ; write integer with default width - asp 4 ; pop parameters - lae 22 - lol -2 - loc 6 - cal $_wsi ; write integer width 6 - asp 6 - lae 22 - lal -12 - loi 8 - loc 9 - loc 3 - cal $_wrf ; write fixed format real, width 9, precision 3 - asp 14 - lae 22 - lol -22 - cal $_wrb ; write boolean, default width - asp 4 - lae 22 - cal $_wln ; writeln - asp 2 - ret 0 ; return, no result - end 226 - exp $_main - pro $_main,0 ; main program - .6 - con 2,-1,22 ; description of external files - .5 - rom 15.96F8 - fil .1 ; maintain source file name - lae .6 ; description of external files - lae 0 ; base of hol area to relocate buffer addresses - cal $_ini ; initialize files, etc... - asp 4 - lin 37 - lae .5 - loi 8 - lae 2 - sti 8 ; mx := 15.96 - lni ; lin 38 prior to optimization - loc 99 - ste 0 ; mi := 99 - lni ; lin 39 prior to optimization - lae 10 ; address of r - cal $test - asp 2 - loc 0 ; normal exit - cal $_hlt ; cleanup and finish - asp 2 - end 0 - mes 5 ; reals were used -.DE 0 -The compact code corresponding to the above program is listed below. -Read it horizontally, line by line, not column by column. -Each number represents a byte of compact code, printed in decimal. -The first two bytes form the magic word. -.N 1 -.IS 3 -.DS B -173 0 159 122 122 122 255 242 1 161 250 124 116 46 112 0 -255 156 245 40 2 245 0 128 120 155 249 123 115 117 109 160 -249 123 115 117 109 122 67 128 63 120 3 122 88 122 152 122 -242 2 161 121 219 122 255 155 249 124 116 101 115 116 160 249 -124 116 101 115 116 245 226 0 242 3 161 253 128 123 52 46 - 56 255 242 4 161 253 128 123 48 46 53 255 159 123 245 30 -255 122 122 255 159 123 96 122 120 255 159 123 98 122 120 255 -159 123 116 122 120 255 159 123 118 122 120 255 159 123 100 128 -120 255 159 123 108 128 120 255 67 140 69 121 113 116 68 73 -116 69 123 81 122 69 126 3 122 113 118 68 57 242 3 72 -128 58 108 112 128 68 58 108 72 128 57 242 4 72 128 44 -128 58 100 112 128 68 69 121 113 98 68 69 245 122 0 113 - 96 68 69 121 113 118 182 73 118 42 122 81 122 58 245 32 -255 73 118 57 242 2 94 122 73 118 69 220 10 123 54 118 - 18 122 183 67 147 73 116 69 147 3 122 104 120 68 73 98 - 73 120 111 130 68 58 100 72 136 2 128 73 120 4 122 112 -128 68 58 245 32 255 73 116 57 242 2 59 122 65 120 20 -249 123 115 117 109 8 124 64 122 113 118 184 67 151 73 118 -128 125 73 116 65 120 3 122 113 116 41 118 18 124 185 67 -152 73 120 113 245 30 255 73 98 73 245 30 255 111 130 58 -100 72 136 2 128 73 245 30 255 4 122 112 128 69 120 104 -245 30 255 67 154 57 142 73 116 20 249 124 95 119 114 105 - 8 124 57 142 73 118 69 126 20 249 124 95 119 115 105 8 -126 57 142 58 108 72 128 69 129 69 123 20 249 124 95 119 -114 102 8 134 57 142 73 98 20 249 124 95 119 114 98 8 -124 57 142 20 249 124 95 119 108 110 8 122 88 120 152 245 -226 0 155 249 125 95 109 97 105 110 160 249 125 95 109 97 -105 110 120 242 6 151 122 119 142 255 242 5 161 253 128 125 - 49 53 46 57 54 255 50 242 1 57 242 6 57 120 20 249 -124 95 105 110 105 8 124 67 157 57 242 5 72 128 57 122 -112 128 68 69 219 110 120 68 57 130 20 249 124 116 101 115 -116 8 122 69 120 20 249 124 95 104 108 116 8 122 152 120 -159 124 160 255 159 125 255 -.DE 0 -.IE -.MS T A 0 -.ME -.BP -.MS B A 0 -.ME -.CT diff --git a/doc/em/int/Makefile b/doc/em/int/Makefile deleted file mode 100644 index 7895cb20e..000000000 --- a/doc/em/int/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -CFLAGS=-O -HOME=../../.. - -install \ -all: em emdmp tables - -tables: mktables $(HOME)/etc/ip_spec.t - mktables $(HOME)/etc/ip_spec.t tables - -mktables: mktables.c $(HOME)/h/em_spec.h $(HOME)/h/em_flag.h \ - $(HOME)/lib.bin/em_data.a $(HOME)/h/ip_spec.h - $(CC) -I$(HOME)/h -O -o mktables mktables.c $(HOME)/lib.bin/em_data.a - -em.out: em.p - apc -mint -O em.p >emerrs ; mv e.out em.out - -em: em.p - apc -O -i em.p >emerrs ; mv a.out em - -nem.p: em.p - sed -e '/maxadr = t16/s//maxadr =t15/' -e '/maxdata = 8191; /s//maxdata = 14335;/' -e '/ adr=.*long/s// adr= 0..maxadr/' nem.p - -nem: nem.p - apc -O -i nem.p >emerrs ; mv a.out nem - -emdmp: emdmp.c - $(CC) -I$(HOME)/h -I$(HOME)/config -o emdmp -O emdmp.c - -cmp: - -pr: - @pr em.p mktables.c emdmp.c diff --git a/doc/em/iotrap.nr b/doc/em/iotrap.nr deleted file mode 100644 index 716f363b9..000000000 --- a/doc/em/iotrap.nr +++ /dev/null @@ -1,376 +0,0 @@ -.SN 8 -.VS 1 0 -.BP -.S1 "ENVIRONMENT INTERACTIONS" -EM programs can interact with their environment in three ways. -Two, starting/stopping and monitor calls, are dealt with in this chapter. -The remaining way to interact, interrupts, will be treated -together with traps in chapter 9. -.S2 "Program starting and stopping" -EM user programs start with a call to a procedure called -m_a_i_n. -The assembler and backends look for the definition of a procedure -with this name in their input. -The call passes three parameters to the procedure. -The parameters are similar to the parameters supplied by the -UNIX -.FS -UNIX is a Trademark of Bell Laboratories. -.FE -operating system to C programs. -These parameters are often called -.BW argc , -.B argv -and -.BW envp . -Argc is the parameter nearest to LB and is a wordsized integer. -The other two are pointers to the first element of an array of -string pointers. -.N -The -.B argv -array contains -.B argc -strings, the first of which contains the program call name. -The other strings in the -.B argv -array are the program parameters. -.P -The -.B envp -array contains strings in the form "name=string", where 'name' -is the name of an environment variable and string its value. -The -.B envp -is terminated by a zero pointer. -.P -An EM user program stops if the program returns from the first -invocation of m_a_i_n. -The contents of the function return area are used to procure a -wordsized program return code. -EM programs also stop when traps and interrupts occur that are -not caught and when the exit monitor call is executed. -.S2 "Input/Output and other monitor calls" -EM differs from most conventional machines in that it has high level i/o -instructions. -Typical instructions are OPEN FILE and READ FROM FILE instead -of low level instructions such as setting and clearing -bits in device registers. -By providing such high level i/o primitives, the task of implementing -EM on various non EM machines is made considerably easier. -.P -I/O is initiated by the MON instruction, which expects an iocode on top -of the stack. -Often there are also parameters which are pushed on the -stack in reverse order, that is: last -parameter first. -Some i/o functions also provide results, which are returned on the stack. -In the list of monitor calls we use several types of parameters and results, -these types consist of integers and unsigneds of varying sizes, but never -smaller than the wordsize, and the two pointer types. -.N 1 -The names of the types used are: -.IS 4 -.PS - 10 -.PT int -an integer of wordsize -.PT int2 -an integer whose size is the maximum of the wordsize and 2 -bytes -.PT int4 -an integer whose size is the maximum of the wordsize and 4 -bytes -.PT intp -an integer with the size of a pointer -.PT uns2 -an unsigned integer whose size is the maximum of the wordsize and 2 -.PT unsp -an unsigned integer with the size of a pointer -.PT ptr -a pointer into data space -.PE 1 -.IE 0 -The table below lists the i/o codes with their results and -parameters. -This list is similar to the system calls of the UNIX Version 7 -operating system. -.BP -.A -To execute a monitor call, proceed as follows: -.IS 2 -.N 1 -.PS a 4 "" ) -.PT -Stack the parameters, in reverse order, last parameter first. -.PT -Push the monitor call number (iocode) onto the stack. -.PT -Execute the MON instruction. -.PE 1 -.IE -An error code is present on the top of the stack after -execution of most monitor calls. -If this error code is zero, the call performed the action -requested and the results are available on top of the stack. -Non-zero error codes indicate a failure, in this case no -results are available and the error code has been pushed twice. -This construction enables programs to test for failure with a -single instruction (~TEQ or TNE~) and still find out the cause of -the failure. -The result name 'e' is reserved for the error code. -.N 1 -List of monitor calls. -.DS B -number name parameters results function - - 1 Exit status:int Terminate this process - 2 Fork e,flag,pid:int Spawn new process - 3 Read fildes:int;buf:ptr;nbytes:unsp - e:int;rbytes:unsp Read from file - 4 Write fildes:int;buf:ptr;nbytes:unsp - e:int;wbytes:unsp Write on a file - 5 Open string:ptr;flag:int - e,fildes:int Open file for read and/or write - 6 Close fildes:int e:int Close a file - 7 Wait e:int;status,pid:int2 - Wait for child - 8 Creat string:ptr;mode:int - e,fildes:int Create a new file - 9 Link string1,string2:ptr - e:int Link to a file - 10 Unlink string:ptr e:int Remove directory entry - 12 Chdir string:ptr e:int Change default directory - 14 Mknod string:ptr;mode,addr:int2 - e:int Make a special file - 15 Chmod string:ptr;mode:int2 - e:int Change mode of file - 16 Chown string:ptr;owner,group:int2 - e:int Change owner/group of a file - 18 Stat string,statbuf:ptr - e:int Get file status - 19 Lseek fildes:int;off:int4;whence:int - e:int;oldoff:int4 Move read/write pointer - 20 Getpid pid:int2 Get process identification - 21 Mount special,string:ptr;rwflag:int - e:int Mount file system - 22 Umount special:ptr e:int Unmount file system - 23 Setuid userid:int2 e:int Set user ID - 24 Getuid e_uid,r_uid:int2 Get user ID - 25 Stime time:int4 e:int Set time and date - 26 Ptrace request:int;pid:int2;addr:ptr;data:int - e,value:int Process trace - 27 Alarm seconds:uns2 previous:uns2 Schedule signal - 28 Fstat fildes:int;statbuf:ptr - e:int Get file status - 29 Pause Stop until signal - 30 Utime string,timep:ptr - e:int Set file times - 33 Access string,mode:int e:int Determine file accessibility - 34 Nice incr:int Set program priority - 35 Ftime bufp:ptr e:int Get date and time - 36 Sync Update filesystem - 37 Kill pid:int2;sig:int - e:int Send signal to a process - 41 Dup fildes,newfildes:int - e,fildes:int Duplicate a file descriptor - 42 Pipe e,w_des,r_des:int Create a pipe - 43 Times buffer:ptr Get process times - 44 Profil buff:ptr;bufsiz,offset,scale:intp Execution time profile - 46 Setgid gid:int2 e:int Set group ID - 47 Getgid e_gid,r_gid:int Get group ID - 48 Sigtrp trapno,signo:int - e,prevtrap:int See below - 51 Acct file:ptr e:int Turn accounting on or off - 53 Lock flag:int e:int Lock a process - 54 Ioctl fildes,request:int;argp:ptr - e:int Control device - 56 Mpxcall cmd:int;vec:ptr e:int Multiplexed file handling - 59 Exece name,argv,envp:ptr - e:int Execute a file - 60 Umask complmode:int2 oldmask:int2 Set file creation mode mask - 61 Chroot string:ptr e:int Change root directory -.DE 1 -Codes 0, 11, 13, 17, 31, 32, 38, 39, 40, 45, 49, 50, 52, -55, 57, 58, 62, and 63 are -not used. -.P -All monitor calls, except fork and sigtrp -are the same as the UNIX version 7 system calls. -.P -The sigtrp entry maps UNIX signals onto EM interrupts. -Normally, trapno is in the range 0 to 252. -In that case it requests that signal signo -will cause trap trapno to occur. -When given trap number -2, default signal handling is reset, and when given -trap number -3, the signal is ignored. -.P -The flag returned by fork is 1 in the child process and 0 in -the parent. -The pid returned is the process-id of the other process. -.BP -.S1 "TRAPS AND INTERRUPTS" -EM provides a means for the user program to catch all traps -generated by the program itself, the hardware, or external conditions. -This mechanism uses five instructions: LIM, SIM, SIG, TRP and RTT. -This section of the manual may be omitted on the first reading since it -presupposes knowledge of the EM instruction set. -.P -The action taken when a trap occures is determined by the value -of an internal EM trap register. -This register contains a pointer to a procedure. -Initially the pointer used is zero and all traps halt the -program with, hopefully, a useful message to the outside world. -The SIG instruction can be used to alter the trap register, -it pops a procedure pointer from the -stack into the trap register. -When a trap occurs after storing a nonzero value in the trap -register, the procedure pointed to by the trap register -is called with the trap number -as the only parameter (see below). -SIG returns the previous value of the trap register on the -stack. -Two consecutive SIGs are a no-op. -When a trap occurs, the trap register is reset to its initial -condition, to prevent recursive traps from hanging the machine up, -e.g. stack overflow in the stack overflow handling procedure. -.P -The runtime systems for some languages need to ignore some EM -traps. -EM offers a feature called the ignore mask. -It contains one bit for each of the lowest 16 trap numbers. -The bits are numbered 0 to 15, with the least significant bit -having number 0. -If a certain bit is 1 the corresponding trap never -occurs and processing simply continues. -The actions performed by the offending instruction are -described by the Pascal program in appendix A. -.N -If the bit is 0, traps are not ignored. -The instructions LIM and SIM allow copying and replacement of -the ignore mask.~ -.P -The TRP instruction generates a trap, the trap number being found on the -stack. -This is, among other things, -useful for library procedures and runtime systems. -It can also be used by a low level trap procedure to pass the trap to a -higher level one (see example below). -.P -The RTT instruction returns from the trap procedure and continues after the -trap. -In the list below all traps marked with an asterisk ('*') are -considered to be fatal and it is explicitly undefined what happens if -you try to restart after the trap. -.P -The way a trap procedure is called is completely compatible -with normal calling conventions. The only way a trap procedure -differs from normal procedures is the return. It has to use RTT instead -of RET. This is necessary because the complete runtime status is saved on the -stack before calling the procedure and all this status has to be reloaded. -Error numbers are in the range 0 to 252. -The trap numbers are divided into three categories: -.IS 4 -.N 1 -.PS - 10 -.PT ~~0-~63 -EM machine errors, e.g. illegal instruction. -.PS - 8 -.PT ~0-15 -maskable -.PT 16-63 -not maskable -.PE -.PT ~64-127 -Reserved for use by compilers, run time systems, etc. -.PT 128-252 -Available for user programs. -.PE 1 -.IE -EM machine errors are numbered as follows: -.DS I 5 -.TS -tab(@); -n l l. -0@EARRAY@Array bound error -1@ERANGE@Range bound error -2@ESET@Set bound error -3@EIOVFL@Integer overflow -4@EFOVFL@Floating overflow -5@EFUNFL@Floating underflow -6@EIDIVZ@Divide by 0 -7@EFDIVZ@Divide by 0.0 -8@EIUND@Undefined integer -9@EFUND@Undefined float -10@ECONV@Conversion error -16*@ESTACK@Stack overflow -17*@EHEAP@Heap overflow -18*@EILLINS@Illegal instruction -19*@EODDZ@Illegal size argument -20*@ECASE@Case error -21*@EMEMFLT@Addressing non existent memory -22*@EBADPTR@Bad pointer used -23*@EBADPC@Program counter out of range -24@EBADLAE@Bad argument of LAE -25@EBADMON@Bad monitor call -26@EBADLIN@Argument of LIN too high -27@EBADGTO@GTO descriptor error -.TE -.DE 0 -.P -As an example, -suppose a subprocedure has to be written to do a numeric -calculation. -When an overflow occurs the computation has to be stopped and -the higher level procedure must be resumed. -This can be programmed as follows using the mechanism described above: -.DS B - mes 2,2,2 ; set sizes -ersave - bss 2,0,0 ; Room to save previous value of trap procedure -msave - bss 2,0,0 ; Room to save previous value of trap mask - - pro calcule,0 ; entry point - lxl 0 ; fill in non-local goto descriptor with LB - ste jmpbuf+4 - lor 1 ; and SP - ste jmpbuf+2 - lim ; get current ignore mask - ste msave ; save it - lim - loc 16 ; bit for EFOVFL - ior 2 ; set in mask - sim ; ignore EFOVFL from now on - lpi $catch ; load procedure identifier - sig ; catch wil get all traps now - ste ersave ; save previous trap procedure identifier -; perform calculation now, possibly generating overflow -1 ; label jumped to by catch procedure - loe ersave ; get old trap procedure - sig ; refer all following trap to old procedure - asp 2 ; remove result of sig - loe msave ; restore previous mask - sim ; done now -; load result of calculation - ret 2 ; return result -jmpbuf - con *1,0,0 - end -.DE 0 -.VS 1 1 -.DS -Example of catch procedure - pro catch,0 ; Local procedure that must catch the overflow trap - lol 2 ; Load trap number - loc 4 ; check for overflow - bne *1 ; if other trap, call higher trap procedure - gto jmpbuf ; return to procedure calcule -1 ; other trap has occurred - loe ersave ; previous trap procedure - sig ; other procedure will get the traps now - asp 2 ; remove the result of sig - lol 2 ; stack trap number - trp ; call other trap procedure - rtt ; if other procedure returns, do the same - end -.DE diff --git a/doc/em/itables b/doc/em/itables deleted file mode 100644 index a4825dc9f..000000000 --- a/doc/em/itables +++ /dev/null @@ -1,2922 +0,0 @@ -.TS -.if \n+(b.=1 .nr d. \n(.c-\n(c.-1 -.de 35 -.ps \n(.s -.vs \n(.vu -.in \n(.iu -.if \n(.u .fi -.if \n(.j .ad -.if \n(.j=0 .na -.. -.nf -.nr #~ 0 -.if \n(.T .if n .nr #~ 0.6n -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.fc -.nr 33 \n(.s -.rm 66 67 68 69 70 71 72 73 74 75 76 77 -.nr 66 0 -.nr 38 \waar -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wadp -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wadp -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wasp -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbeq -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wble -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbne -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbra -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcff -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcmf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcms -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdec -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdup -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wfil -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wine -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \winn -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlae -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlal -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlal -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wldc -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wldl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlfr -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlil -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlni -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wloc -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wloe -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlof -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wloi -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlol -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlol -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlxa -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wmli -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wret -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsbf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wset -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsli -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wstf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsti -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wstl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wstl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wtgt -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzeq -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzge -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzlt -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzre -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzrl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \waar -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wadi -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wads -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wand -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wass -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbgt -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbls -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbne -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcfi -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcmf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcmi -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcmu -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcom -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcsb -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wcui -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdel -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdus -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdvf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdvu -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wfef -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \winl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \winn -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlar -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wldf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlfr -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlim -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlor -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlxl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wmli -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wmlu -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wngf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wnop -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wret -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wrmu -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wrol -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wrtt -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsbf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsbi -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsbu -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsdf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wset -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsil -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsli -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wslu -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsru -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsts -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wtge -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wxor -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzer -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzle -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzrf -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdch -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wexg -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wldc -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlal -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wldl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlil -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlof -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wlpi -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbeq -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wble -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wbne -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wdee -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wfil -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \winl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsde -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wsdl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wste -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wstl -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzgt -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzne -.if \n(66<\n(38 .nr 66 \n(38 -.nr 38 \wzrl -.if \n(66<\n(38 .nr 66 \n(38 -.66 -.rm 66 -.nr 38 4n -.if \n(66<\n(38 .nr 66 \n(38 -.nr 67 0 -.nr 38 \wmwPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsN -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsw -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wN2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wswP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmN -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \ww2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwP2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwN -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmPo -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwP2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wmwN -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wsP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \ww2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wswN -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wewP2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wewP2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wesP -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wewP2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we2 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \we- -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wN4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwP4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwN4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \ww4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwP4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwN4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \ww4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwN4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \w4 -.if \n(67<\n(38 .nr 67 \n(38 -.nr 38 \wwN4 -.if \n(67<\n(38 .nr 67 \n(38 -.67 -.rm 67 -.nr 38 6n -.if \n(67<\n(38 .nr 67 \n(38 -.nr 68 0 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w5 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w2 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w2 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w4 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w8 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w2 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w5 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.nr 38 \w1 -.if \n(68<\n(38 .nr 68 \n(38 -.68 -.rm 68 -.nr 38 2n -.if \n(68<\n(38 .nr 68 \n(38 -.nr 69 0 -.nr 38 \w34 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w38 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w42 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w45 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w52 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w55 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w58 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w62 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w93 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w96 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w100 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w103 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w106 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w109 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w112 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w117 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w120 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w129 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w132 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w136 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w139 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w143 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w146 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w150 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w152 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w155 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w162 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w168 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w174 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w180 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w190 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w194 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w199 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w202 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w206 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w209 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w214 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w218 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w224 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w228 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w235 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w238 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w242 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w245 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w248 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w252 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w1 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w4 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w7 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w10 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w13 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w16 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w19 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w22 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w25 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w28 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w31 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w34 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w37 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w40 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w43 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w46 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w49 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w52 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w55 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w58 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w61 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w64 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w67 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w70 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w73 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w76 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w79 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w82 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w85 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w88 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w91 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w94 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w97 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w100 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w103 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w106 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w109 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w112 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w115 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w118 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w121 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w124 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w127 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w130 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w133 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w136 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w139 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w142 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w145 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w148 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w151 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w154 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w157 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w0 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w3 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w6 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w9 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w12 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w15 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w18 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w21 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w24 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w27 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w30 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w33 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w36 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w39 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w42 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w45 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w48 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w51 -.if \n(69<\n(38 .nr 69 \n(38 -.nr 38 \w54 -.if \n(69<\n(38 .nr 69 \n(38 -.69 -.rm 69 -.nr 38 5n -.if \n(69<\n(38 .nr 69 \n(38 -.nr 70 0 -.nr 38 \wadf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wadp -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wads -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wasp -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wbge -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wblm -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wbra -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcal -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcif -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcmi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcsa -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdee -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdvf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \winc -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \winl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wior -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlae -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlal -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlal -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlde -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wldl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlil -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlin -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wloc -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wloc -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wloe -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlof -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wloi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlol -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlol -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlxl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wrck -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wrmi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsbi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsil -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wste -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wstf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsti -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wstl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wstl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wtlt -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzeq -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzgt -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzne -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzre -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzrl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wadf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wadi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wadu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wand -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wass -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wble -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wbls -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcai -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcfu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcmf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcms -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcmu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcsa -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcsb -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wcuu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdel -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdus -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdvi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdvu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wfif -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \winl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wior -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlar -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wldl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlil -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlos -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlpi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wmlf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wmli -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wmon -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wngi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wrck -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wrmi -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wrmu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wror -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsar -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsbf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsbs -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsbu -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsdl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wset -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsil -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsli -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsri -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsru -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsts -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wtle -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wxor -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzge -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzlt -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzrf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wexg -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlpb -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlae -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlde -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wldl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wloc -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wlol -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wadp -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wbge -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wblm -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wbra -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wdel -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wgto -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \winl -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsdf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wsil -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wstf -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzeq -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzle -.if \n(70<\n(38 .nr 70 \n(38 -.nr 38 \wzre -.if \n(70<\n(38 .nr 70 \n(38 -.70 -.rm 70 -.nr 38 4n -.if \n(70<\n(38 .nr 70 \n(38 -.nr 71 0 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsw -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwN -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsw -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswN -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \ww2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswN -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswN -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsw -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwN2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswN -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \ww2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wmwPo -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwN2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wswN -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wsw -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwN2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wewN2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wewN2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wewP2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wewP2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wewP2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wewN2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we2 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wesP -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \we- -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \ww4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwN4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwP4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwP4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwN4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \wwP4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \w4 -.if \n(71<\n(38 .nr 71 \n(38 -.nr 38 \ww4 -.if \n(71<\n(38 .nr 71 \n(38 -.71 -.rm 71 -.nr 38 6n -.if \n(71<\n(38 .nr 71 \n(38 -.nr 72 0 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w28 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w3 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w7 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w5 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w4 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w4 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w2 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.nr 38 \w1 -.if \n(72<\n(38 .nr 72 \n(38 -.72 -.rm 72 -.nr 38 2n -.if \n(72<\n(38 .nr 72 \n(38 -.nr 73 0 -.nr 38 \w35 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w39 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w43 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w50 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w53 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w56 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w59 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w64 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w94 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w97 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w101 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w104 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w107 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w110 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w113 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w118 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w121 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w130 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w133 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w137 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w140 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w144 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w148 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w151 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w153 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w156 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w166 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w169 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w175 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w188 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w191 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w196 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w200 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w203 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w207 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w210 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w215 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w219 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w225 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w233 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w236 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w239 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w243 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w246 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w249 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w253 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w2 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w5 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w8 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w11 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w14 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w17 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w20 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w23 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w26 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w29 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w32 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w35 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w38 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w41 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w44 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w47 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w50 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w53 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w56 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w59 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w62 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w65 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w68 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w71 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w74 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w77 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w80 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w83 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w86 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w89 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w92 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w95 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w98 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w101 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w104 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w107 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w110 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w113 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w116 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w119 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w122 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w125 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w128 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w131 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w134 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w137 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w140 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w143 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w146 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w149 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w152 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w155 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w158 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w1 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w4 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w7 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w10 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w13 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w16 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w19 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w22 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w25 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w28 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w31 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w34 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w37 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w40 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w43 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w46 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w49 -.if \n(73<\n(38 .nr 73 \n(38 -.nr 38 \w52 -.if \n(73<\n(38 .nr 73 \n(38 -.73 -.rm 73 -.nr 38 5n -.if \n(73<\n(38 .nr 73 \n(38 -.nr 74 0 -.nr 38 \wadi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wadp -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wand -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wbeq -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wbgt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wblt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wbra -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcal -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcii -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcmp -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcsb -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdel -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdvi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wine -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \winl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wior -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlal -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlal -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlar -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlde -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlfr -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlil -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlin -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wloc -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wloc -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlof -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wloi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wloi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlol -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlol -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wmlf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wret -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsar -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsdl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsil -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wste -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wstf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsti -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wstl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wteq -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wtne -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzer -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzle -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzne -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzrl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \waar -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wadf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wads -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wadu -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wasp -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wbge -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wblm -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wblt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcal -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wciu -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcmi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcms -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcom -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcsa -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcuf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdee -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdup -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdvf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdvi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wfef -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wfif -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \winn -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wior -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wldc -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wldl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlil -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlos -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlxa -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wmlf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wmlu -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wngf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wngi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wrck -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wrmi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wrol -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wror -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsar -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsbi -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsbs -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsde -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsdl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsig -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsim -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wslu -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsri -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsti -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wstr -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wtrp -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzer -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzgt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzne -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzrl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wexg -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wgto -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlal -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wldf -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlil -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wloe -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlol -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wasp -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wbgt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wblt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wcal -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wdel -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wine -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wlin -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsdl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wsil -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wstl -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzge -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzlt -.if \n(74<\n(38 .nr 74 \n(38 -.nr 38 \wzrl -.if \n(74<\n(38 .nr 74 \n(38 -.74 -.rm 74 -.nr 38 4n -.if \n(74<\n(38 .nr 74 \n(38 -.nr 75 0 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wswN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \ww2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wswN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wP2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsw -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wswP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wswN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwPo -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wswN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wswP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsw -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wsN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wmwN -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wew2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wew2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wewN2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wewN2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wewN2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wesP -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we- -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wewP2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \we2 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wP4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwP4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \ww4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwN4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \ww4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwN4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \ww4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwP4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwN4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwP4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \w4 -.if \n(75<\n(38 .nr 75 \n(38 -.nr 38 \wwP4 -.if \n(75<\n(38 .nr 75 \n(38 -.75 -.rm 75 -.nr 38 6n -.if \n(75<\n(38 .nr 75 \n(38 -.nr 76 0 -.nr 38 \w2 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w2 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w2 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w34 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w4 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w2 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w3 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w2 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w2 -.if \n(76<\n(38 .nr 76 \n(38 -.nr 38 \w1 -.if \n(76<\n(38 .nr 76 \n(38 -.76 -.rm 76 -.nr 38 2n -.if \n(76<\n(38 .nr 76 \n(38 -.nr 77 0 -.nr 38 \w36 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w41 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w44 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w51 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w54 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w57 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w60 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w92 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w95 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w99 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w102 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w105 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w108 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w111 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w116 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w119 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w128 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w131 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w135 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w138 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w141 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w145 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w149 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w0 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w154 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w161 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w167 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w173 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w176 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w189 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w193 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w197 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w201 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w205 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w208 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w211 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w217 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w223 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w226 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w234 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w237 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w241 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w244 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w247 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w250 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w0 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w3 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w6 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w9 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w12 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w15 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w18 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w21 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w24 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w27 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w30 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w33 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w36 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w39 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w42 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w45 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w48 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w51 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w54 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w57 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w60 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w63 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w66 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w69 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w72 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w75 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w78 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w81 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w84 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w87 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w90 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w93 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w96 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w99 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w102 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w105 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w108 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w111 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w114 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w117 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w120 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w123 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w126 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w129 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w132 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w135 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w138 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w141 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w144 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w147 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w150 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w153 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w156 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w159 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w2 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w5 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w8 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w11 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w14 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w17 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w20 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w23 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w26 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w29 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w32 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w35 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w38 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w41 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w44 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w47 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w50 -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 \w53 -.if \n(77<\n(38 .nr 77 \n(38 -.77 -.rm 77 -.nr 38 5n -.if \n(77<\n(38 .nr 77 \n(38 -.nr 38 1n -.nr 65 0 -.nr 40 \n(65+((0*\n(38)/2) -.nr 66 +\n(40 -.nr 41 \n(66+((0*\n(38)/2) -.nr 67 +\n(41 -.nr 42 \n(67+((0*\n(38)/2) -.nr 68 +\n(42 -.nr 43 \n(68+((0*\n(38)/2) -.nr 69 +\n(43 -.nr 44 \n(69+((16*\n(38)/2) -.nr 70 +\n(44 -.nr 45 \n(70+((0*\n(38)/2) -.nr 71 +\n(45 -.nr 46 \n(71+((0*\n(38)/2) -.nr 72 +\n(46 -.nr 47 \n(72+((0*\n(38)/2) -.nr 73 +\n(47 -.nr 48 \n(73+((16*\n(38)/2) -.nr 74 +\n(48 -.nr 49 \n(74+((0*\n(38)/2) -.nr 75 +\n(49 -.nr 50 \n(75+((0*\n(38)/2) -.nr 76 +\n(50 -.nr 51 \n(76+((0*\n(38)/2) -.nr 77 +\n(51 -.nr TW \n(77 -.if t .if (\n(TW+\n(.o)>7.65i .tm Table at line 121 file Input is too wide - \n(TW units -.fc   -.nr #T 0-1 -.nr #a 0-1 -.eo -.de T# -.nr 35 1m -.ds #d .d -.if \(ts\n(.z\(ts\(ts .ds #d nl -.mk ## -.nr ## -1v -.ls 1 -.ls -.. -.ec -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'aar\h'|\n(41u'mwPo\h'|\n(42u'1\h'|\n(43u'34\h'|\n(44u'adf\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'35\h'|\n(48u'adi\h'|\n(49u'mwPo\h'|\n(50u'2\h'|\n(51u'36 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'adp\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'38\h'|\n(44u'adp\h'|\n(45u'mPo\h'|\n(46u'2\h'|\n(47u'39\h'|\n(48u'adp\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'41 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'adp\h'|\n(41u'sN\h'|\n(42u'1\h'|\n(43u'42\h'|\n(44u'ads\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'43\h'|\n(48u'and\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'44 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'asp\h'|\n(41u'mwPo\h'|\n(42u'5\h'|\n(43u'45\h'|\n(44u'asp\h'|\n(45u'swP\h'|\n(46u'1\h'|\n(47u'50\h'|\n(48u'beq\h'|\n(49u'2\h'|\n(50u'\h'|\n(51u'51 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'beq\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'52\h'|\n(44u'bge\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'53\h'|\n(48u'bgt\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'54 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ble\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'55\h'|\n(44u'blm\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'56\h'|\n(48u'blt\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'57 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'bne\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'58\h'|\n(44u'bra\h'|\n(45u'2\h'|\n(46u'\h'|\n(47u'59\h'|\n(48u'bra\h'|\n(49u'sN\h'|\n(50u'2\h'|\n(51u'60 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'bra\h'|\n(41u'sP\h'|\n(42u'2\h'|\n(43u'62\h'|\n(44u'cal\h'|\n(45u'mPo\h'|\n(46u'28\h'|\n(47u'64\h'|\n(48u'cal\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'92 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cff\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'93\h'|\n(44u'cif\h'|\n(45u'-\h'|\n(46u'\h'|\n(47u'94\h'|\n(48u'cii\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'95 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cmf\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'96\h'|\n(44u'cmi\h'|\n(45u'mwPo\h'|\n(46u'2\h'|\n(47u'97\h'|\n(48u'cmp\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'99 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cms\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'100\h'|\n(44u'csa\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'101\h'|\n(48u'csb\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'102 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dec\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'103\h'|\n(44u'dee\h'|\n(45u'sw\h'|\n(46u'1\h'|\n(47u'104\h'|\n(48u'del\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'105 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dup\h'|\n(41u'mwPo\h'|\n(42u'1\h'|\n(43u'106\h'|\n(44u'dvf\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'107\h'|\n(48u'dvi\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'108 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'fil\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'109\h'|\n(44u'inc\h'|\n(45u'-\h'|\n(46u'\h'|\n(47u'110\h'|\n(48u'ine\h'|\n(49u'w2\h'|\n(50u'\h'|\n(51u'111 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ine\h'|\n(41u'sw\h'|\n(42u'1\h'|\n(43u'112\h'|\n(44u'inl\h'|\n(45u'mwN\h'|\n(46u'3\h'|\n(47u'113\h'|\n(48u'inl\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'116 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'inn\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'117\h'|\n(44u'ior\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'118\h'|\n(48u'ior\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'119 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lae\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'120\h'|\n(44u'lae\h'|\n(45u'sw\h'|\n(46u'7\h'|\n(47u'121\h'|\n(48u'lal\h'|\n(49u'P2\h'|\n(50u'\h'|\n(51u'128 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lal\h'|\n(41u'N2\h'|\n(42u'\h'|\n(43u'129\h'|\n(44u'lal\h'|\n(45u'mP\h'|\n(46u'1\h'|\n(47u'130\h'|\n(48u'lal\h'|\n(49u'mN\h'|\n(50u'1\h'|\n(51u'131 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lal\h'|\n(41u'swP\h'|\n(42u'1\h'|\n(43u'132\h'|\n(44u'lal\h'|\n(45u'swN\h'|\n(46u'2\h'|\n(47u'133\h'|\n(48u'lar\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'135 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ldc\h'|\n(41u'mP\h'|\n(42u'1\h'|\n(43u'136\h'|\n(44u'lde\h'|\n(45u'w2\h'|\n(46u'\h'|\n(47u'137\h'|\n(48u'lde\h'|\n(49u'sw\h'|\n(50u'1\h'|\n(51u'138 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ldl\h'|\n(41u'mP\h'|\n(42u'1\h'|\n(43u'139\h'|\n(44u'ldl\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'140\h'|\n(48u'lfr\h'|\n(49u'mwPo\h'|\n(50u'2\h'|\n(51u'141 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lfr\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'143\h'|\n(44u'lil\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'144\h'|\n(48u'lil\h'|\n(49u'swP\h'|\n(50u'1\h'|\n(51u'145 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lil\h'|\n(41u'mwP\h'|\n(42u'2\h'|\n(43u'146\h'|\n(44u'lin\h'|\n(45u'2\h'|\n(46u'\h'|\n(47u'148\h'|\n(48u'lin\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'149 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lni\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'150\h'|\n(44u'loc\h'|\n(45u'2\h'|\n(46u'\h'|\n(47u'151\h'|\n(48u'loc\h'|\n(49u'mP\h'|\n(50u'34\h'|\n(51u'0 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'loc\h'|\n(41u'mN\h'|\n(42u'1\h'|\n(43u'152\h'|\n(44u'loc\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'153\h'|\n(48u'loc\h'|\n(49u'sN\h'|\n(50u'1\h'|\n(51u'154 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'loe\h'|\n(41u'w2\h'|\n(42u'\h'|\n(43u'155\h'|\n(44u'loe\h'|\n(45u'sw\h'|\n(46u'5\h'|\n(47u'156\h'|\n(48u'lof\h'|\n(49u'2\h'|\n(50u'\h'|\n(51u'161 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lof\h'|\n(41u'mwPo\h'|\n(42u'4\h'|\n(43u'162\h'|\n(44u'lof\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'166\h'|\n(48u'loi\h'|\n(49u'2\h'|\n(50u'\h'|\n(51u'167 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'loi\h'|\n(41u'mPo\h'|\n(42u'1\h'|\n(43u'168\h'|\n(44u'loi\h'|\n(45u'mwPo\h'|\n(46u'4\h'|\n(47u'169\h'|\n(48u'loi\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'173 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lol\h'|\n(41u'wP2\h'|\n(42u'\h'|\n(43u'174\h'|\n(44u'lol\h'|\n(45u'wN2\h'|\n(46u'\h'|\n(47u'175\h'|\n(48u'lol\h'|\n(49u'mwP\h'|\n(50u'4\h'|\n(51u'176 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lol\h'|\n(41u'mwN\h'|\n(42u'8\h'|\n(43u'180\h'|\n(44u'lol\h'|\n(45u'swP\h'|\n(46u'1\h'|\n(47u'188\h'|\n(48u'lol\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'189 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lxa\h'|\n(41u'mPo\h'|\n(42u'1\h'|\n(43u'190\h'|\n(44u'lxl\h'|\n(45u'mPo\h'|\n(46u'2\h'|\n(47u'191\h'|\n(48u'mlf\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'193 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'mli\h'|\n(41u'mwPo\h'|\n(42u'2\h'|\n(43u'194\h'|\n(44u'rck\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'196\h'|\n(48u'ret\h'|\n(49u'mwP\h'|\n(50u'2\h'|\n(51u'197 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ret\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'199\h'|\n(44u'rmi\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'200\h'|\n(48u'sar\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'201 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sbf\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'202\h'|\n(44u'sbi\h'|\n(45u'mwPo\h'|\n(46u'2\h'|\n(47u'203\h'|\n(48u'sdl\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'205 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'set\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'206\h'|\n(44u'sil\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'207\h'|\n(48u'sil\h'|\n(49u'swP\h'|\n(50u'1\h'|\n(51u'208 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sli\h'|\n(41u'mwPo\h'|\n(42u'1\h'|\n(43u'209\h'|\n(44u'ste\h'|\n(45u'w2\h'|\n(46u'\h'|\n(47u'210\h'|\n(48u'ste\h'|\n(49u'sw\h'|\n(50u'3\h'|\n(51u'211 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'stf\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'214\h'|\n(44u'stf\h'|\n(45u'mwPo\h'|\n(46u'2\h'|\n(47u'215\h'|\n(48u'stf\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'217 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sti\h'|\n(41u'mPo\h'|\n(42u'1\h'|\n(43u'218\h'|\n(44u'sti\h'|\n(45u'mwPo\h'|\n(46u'4\h'|\n(47u'219\h'|\n(48u'sti\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'223 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'stl\h'|\n(41u'wP2\h'|\n(42u'\h'|\n(43u'224\h'|\n(44u'stl\h'|\n(45u'wN2\h'|\n(46u'\h'|\n(47u'225\h'|\n(48u'stl\h'|\n(49u'mwP\h'|\n(50u'2\h'|\n(51u'226 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'stl\h'|\n(41u'mwN\h'|\n(42u'5\h'|\n(43u'228\h'|\n(44u'stl\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'233\h'|\n(48u'teq\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'234 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'tgt\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'235\h'|\n(44u'tlt\h'|\n(45u'-\h'|\n(46u'\h'|\n(47u'236\h'|\n(48u'tne\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'237 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zeq\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'238\h'|\n(44u'zeq\h'|\n(45u'sP\h'|\n(46u'2\h'|\n(47u'239\h'|\n(48u'zer\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'241 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zge\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'242\h'|\n(44u'zgt\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'243\h'|\n(48u'zle\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'244 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zlt\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'245\h'|\n(44u'zne\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'246\h'|\n(48u'zne\h'|\n(49u'sN\h'|\n(50u'1\h'|\n(51u'247 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zre\h'|\n(41u'w2\h'|\n(42u'\h'|\n(43u'248\h'|\n(44u'zre\h'|\n(45u'sw\h'|\n(46u'1\h'|\n(47u'249\h'|\n(48u'zrl\h'|\n(49u'mwN\h'|\n(50u'2\h'|\n(51u'250 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zrl\h'|\n(41u'swN\h'|\n(42u'1\h'|\n(43u'252\h'|\n(44u'zrl\h'|\n(45u'wN2\h'|\n(46u'\h'|\n(47u'253\h'|\n(48u'aar\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'0 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'aar\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'1\h'|\n(44u'adf\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'2\h'|\n(48u'adf\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'3 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'adi\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'4\h'|\n(44u'adi\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'5\h'|\n(48u'ads\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'6 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ads\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'7\h'|\n(44u'adu\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'8\h'|\n(48u'adu\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'9 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'and\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'10\h'|\n(44u'and\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'11\h'|\n(48u'asp\h'|\n(49u'ew2\h'|\n(50u'\h'|\n(51u'12 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ass\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'13\h'|\n(44u'ass\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'14\h'|\n(48u'bge\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'15 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'bgt\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'16\h'|\n(44u'ble\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'17\h'|\n(48u'blm\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'18 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'bls\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'19\h'|\n(44u'bls\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'20\h'|\n(48u'blt\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'21 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'bne\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'22\h'|\n(44u'cai\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'23\h'|\n(48u'cal\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'24 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cfi\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'25\h'|\n(44u'cfu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'26\h'|\n(48u'ciu\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'27 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cmf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'28\h'|\n(44u'cmf\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'29\h'|\n(48u'cmi\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'30 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cmi\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'31\h'|\n(44u'cms\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'32\h'|\n(48u'cms\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'33 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cmu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'34\h'|\n(44u'cmu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'35\h'|\n(48u'com\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'36 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'com\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'37\h'|\n(44u'csa\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'38\h'|\n(48u'csa\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'39 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'csb\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'40\h'|\n(44u'csb\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'41\h'|\n(48u'cuf\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'42 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'cui\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'43\h'|\n(44u'cuu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'44\h'|\n(48u'dee\h'|\n(49u'ew2\h'|\n(50u'\h'|\n(51u'45 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'del\h'|\n(41u'ewP2\h'|\n(42u'\h'|\n(43u'46\h'|\n(44u'del\h'|\n(45u'ewN2\h'|\n(46u'\h'|\n(47u'47\h'|\n(48u'dup\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'48 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dus\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'49\h'|\n(44u'dus\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'50\h'|\n(48u'dvf\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'51 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dvf\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'52\h'|\n(44u'dvi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'53\h'|\n(48u'dvi\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'54 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dvu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'55\h'|\n(44u'dvu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'56\h'|\n(48u'fef\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'57 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'fef\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'58\h'|\n(44u'fif\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'59\h'|\n(48u'fif\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'60 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'inl\h'|\n(41u'ewP2\h'|\n(42u'\h'|\n(43u'61\h'|\n(44u'inl\h'|\n(45u'ewN2\h'|\n(46u'\h'|\n(47u'62\h'|\n(48u'inn\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'63 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'inn\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'64\h'|\n(44u'ior\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'65\h'|\n(48u'ior\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'66 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lar\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'67\h'|\n(44u'lar\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'68\h'|\n(48u'ldc\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'69 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ldf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'70\h'|\n(44u'ldl\h'|\n(45u'ewP2\h'|\n(46u'\h'|\n(47u'71\h'|\n(48u'ldl\h'|\n(49u'ewN2\h'|\n(50u'\h'|\n(51u'72 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lfr\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'73\h'|\n(44u'lil\h'|\n(45u'ewP2\h'|\n(46u'\h'|\n(47u'74\h'|\n(48u'lil\h'|\n(49u'ewN2\h'|\n(50u'\h'|\n(51u'75 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lim\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'76\h'|\n(44u'los\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'77\h'|\n(48u'los\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'78 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lor\h'|\n(41u'esP\h'|\n(42u'1\h'|\n(43u'79\h'|\n(44u'lpi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'80\h'|\n(48u'lxa\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'81 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lxl\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'82\h'|\n(44u'mlf\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'83\h'|\n(48u'mlf\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'84 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'mli\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'85\h'|\n(44u'mli\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'86\h'|\n(48u'mlu\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'87 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'mlu\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'88\h'|\n(44u'mon\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'89\h'|\n(48u'ngf\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'90 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ngf\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'91\h'|\n(44u'ngi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'92\h'|\n(48u'ngi\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'93 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'nop\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'94\h'|\n(44u'rck\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'95\h'|\n(48u'rck\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'96 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ret\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'97\h'|\n(44u'rmi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'98\h'|\n(48u'rmi\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'99 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'rmu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'100\h'|\n(44u'rmu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'101\h'|\n(48u'rol\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'102 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'rol\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'103\h'|\n(44u'ror\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'104\h'|\n(48u'ror\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'105 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'rtt\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'106\h'|\n(44u'sar\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'107\h'|\n(48u'sar\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'108 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sbf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'109\h'|\n(44u'sbf\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'110\h'|\n(48u'sbi\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'111 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sbi\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'112\h'|\n(44u'sbs\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'113\h'|\n(48u'sbs\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'114 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sbu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'115\h'|\n(44u'sbu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'116\h'|\n(48u'sde\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'117 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sdf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'118\h'|\n(44u'sdl\h'|\n(45u'ewP2\h'|\n(46u'\h'|\n(47u'119\h'|\n(48u'sdl\h'|\n(49u'ewN2\h'|\n(50u'\h'|\n(51u'120 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'set\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'121\h'|\n(44u'set\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'122\h'|\n(48u'sig\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'123 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sil\h'|\n(41u'ewP2\h'|\n(42u'\h'|\n(43u'124\h'|\n(44u'sil\h'|\n(45u'ewN2\h'|\n(46u'\h'|\n(47u'125\h'|\n(48u'sim\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'126 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sli\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'127\h'|\n(44u'sli\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'128\h'|\n(48u'slu\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'129 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'slu\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'130\h'|\n(44u'sri\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'131\h'|\n(48u'sri\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'132 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sru\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'133\h'|\n(44u'sru\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'134\h'|\n(48u'sti\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'135 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sts\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'136\h'|\n(44u'sts\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'137\h'|\n(48u'str\h'|\n(49u'esP\h'|\n(50u'1\h'|\n(51u'138 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'tge\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'139\h'|\n(44u'tle\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'140\h'|\n(48u'trp\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'141 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'xor\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'142\h'|\n(44u'xor\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'143\h'|\n(48u'zer\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'144 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zer\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'145\h'|\n(44u'zge\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'146\h'|\n(48u'zgt\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'147 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zle\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'148\h'|\n(44u'zlt\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'149\h'|\n(48u'zne\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'150 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zrf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'151\h'|\n(44u'zrf\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'152\h'|\n(48u'zrl\h'|\n(49u'ewP2\h'|\n(50u'\h'|\n(51u'153 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dch\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'154\h'|\n(44u'exg\h'|\n(45u'esP\h'|\n(46u'1\h'|\n(47u'155\h'|\n(48u'exg\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'156 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'exg\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'157\h'|\n(44u'lpb\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'158\h'|\n(48u'gto\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'159 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ldc\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'0\h'|\n(44u'lae\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'1\h'|\n(48u'lal\h'|\n(49u'P4\h'|\n(50u'\h'|\n(51u'2 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lal\h'|\n(41u'N4\h'|\n(42u'\h'|\n(43u'3\h'|\n(44u'lde\h'|\n(45u'w4\h'|\n(46u'\h'|\n(47u'4\h'|\n(48u'ldf\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'5 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ldl\h'|\n(41u'wP4\h'|\n(42u'\h'|\n(43u'6\h'|\n(44u'ldl\h'|\n(45u'wN4\h'|\n(46u'\h'|\n(47u'7\h'|\n(48u'lil\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'8 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lil\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'9\h'|\n(44u'loc\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'10\h'|\n(48u'loe\h'|\n(49u'w4\h'|\n(50u'\h'|\n(51u'11 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lof\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'12\h'|\n(44u'lol\h'|\n(45u'wP4\h'|\n(46u'\h'|\n(47u'13\h'|\n(48u'lol\h'|\n(49u'wN4\h'|\n(50u'\h'|\n(51u'14 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'lpi\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'15\h'|\n(44u'adp\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'16\h'|\n(48u'asp\h'|\n(49u'w4\h'|\n(50u'\h'|\n(51u'17 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'beq\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'18\h'|\n(44u'bge\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'19\h'|\n(48u'bgt\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'20 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ble\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'21\h'|\n(44u'blm\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'22\h'|\n(48u'blt\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'23 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'bne\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'24\h'|\n(44u'bra\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'25\h'|\n(48u'cal\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'26 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'dee\h'|\n(41u'w4\h'|\n(42u'\h'|\n(43u'27\h'|\n(44u'del\h'|\n(45u'wP4\h'|\n(46u'\h'|\n(47u'28\h'|\n(48u'del\h'|\n(49u'wN4\h'|\n(50u'\h'|\n(51u'29 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'fil\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'30\h'|\n(44u'gto\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'31\h'|\n(48u'ine\h'|\n(49u'w4\h'|\n(50u'\h'|\n(51u'32 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'inl\h'|\n(41u'wP4\h'|\n(42u'\h'|\n(43u'33\h'|\n(44u'inl\h'|\n(45u'wN4\h'|\n(46u'\h'|\n(47u'34\h'|\n(48u'lin\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'35 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sde\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'36\h'|\n(44u'sdf\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'37\h'|\n(48u'sdl\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'38 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'sdl\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'39\h'|\n(44u'sil\h'|\n(45u'wP4\h'|\n(46u'\h'|\n(47u'40\h'|\n(48u'sil\h'|\n(49u'wN4\h'|\n(50u'\h'|\n(51u'41 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'ste\h'|\n(41u'w4\h'|\n(42u'\h'|\n(43u'42\h'|\n(44u'stf\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'43\h'|\n(48u'stl\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'44 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'stl\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'45\h'|\n(44u'zeq\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'46\h'|\n(48u'zge\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'47 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zgt\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'48\h'|\n(44u'zle\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'49\h'|\n(48u'zlt\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'50 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zne\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'51\h'|\n(44u'zre\h'|\n(45u'w4\h'|\n(46u'\h'|\n(47u'52\h'|\n(48u'zrl\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'53 -.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u -.nr 35 1m -.nr 31 \n(.f -\&\h'|\n(40u'zrl\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'54\h'|\n(44u'\h'|\n(45u'\h'|\n(46u'\h'|\n(47u'\h'|\n(48u'\h'|\n(49u'\h'|\n(50u'\h'|\n(51u' -.fc -.nr T. 1 -.T# 1 -.35 -.TE -.if \n-(b.=0 .nr c. \n(.c-\n(d.-120 diff --git a/doc/em/print b/doc/em/print deleted file mode 100755 index a9b9b0335..000000000 --- a/doc/em/print +++ /dev/null @@ -1,5 +0,0 @@ - -case $# in -1) make "$1".t ; ntlp "$1".t^lpr ;; -*) echo $0 heeft een argument nodig ;; -esac diff --git a/doc/em/show b/doc/em/show deleted file mode 100755 index f60e8e463..000000000 --- a/doc/em/show +++ /dev/null @@ -1,4 +0,0 @@ -case $# in -1) make $1.t ; ntout $1.t ;; -*) echo $0 heeft een argument nodig ;; -esac diff --git a/doc/lint/Makefile b/doc/lint/Makefile deleted file mode 100644 index 3a17c50b3..000000000 --- a/doc/lint/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $Header$ - -FP = frontpage - -DOC = abstract contents chap1 chap2 chap3 chap4 chap5 chap6 chap7\ - chap8 chap9 appendix_A appendix_B - -../lint.doc: $(FP) $(DOC) - cat $(FP) $(DOC) > ../lint.doc diff --git a/doc/occam/Makefile b/doc/occam/Makefile deleted file mode 100644 index 9a5ba5b45..000000000 --- a/doc/occam/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -EMHOME=../.. -FILES= p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 - -PIC=pic -EQN=eqn -TBL=tbl -TARGET=-Tlp -../occam.doc: p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 channel.h.t channel.c.t - soelim $(FILES) | $(PIC) $(TARGET) | $(TBL) | $(EQN) $(TARGET) > $@ - -channel.h.t: $(EMHOME)/h/ocm_chan.h - ctot <$(EMHOME)/h/ocm_chan.h >channel.h.t - -channel.c.t: channel.c - ctot channel.c.t - -channel.c: $(EMHOME)/lang/occam/lib/tail_ocm.a - arch x $(EMHOME)/lang/occam/lib/tail_ocm.a channel.c diff --git a/doc/sparc/Makefile b/doc/sparc/Makefile deleted file mode 100644 index 6bff68167..000000000 --- a/doc/sparc/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# $Header$ - -REFER=refer -TBL=tbl -TARGET=-Tlp -PIC=pic -GRAP=grap - -../sparc.doc: refs title intro 1 2 3 4 5 A B init - $(REFER) -sA+T '-l\", ' -p refs title intro 1 2 3 4 5 A B | $(GRAP) | $(PIC) | $(TBL) | soelim > $@ diff --git a/doc/top/Makefile b/doc/top/Makefile deleted file mode 100644 index 3884528d3..000000000 --- a/doc/top/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $Header$ - -REFER=refer -TBL=tbl -TARGET=-Tlp - -../top.doc: top.n refs.top - $(REFER) -sA+T -l4,2 -p refs.top top.n | $(TBL) > $@ diff --git a/emtest/last b/emtest/last deleted file mode 100644 index 573541ac9..000000000 --- a/emtest/last +++ /dev/null @@ -1 +0,0 @@ -0 diff --git a/emtest/test.e b/emtest/test.e deleted file mode 100644 index 7f26cf5f5..000000000 --- a/emtest/test.e +++ /dev/null @@ -1,28 +0,0 @@ -#define WS EM_WSIZE -#define PS EM_PSIZE -#include "test.h" - mes 2,WS,PS - mes 1 - mes 4,300 -.000 - con "tst000" - exp $m_a_i_n - pro $m_a_i_n,0 - loc 123 - loc -98 -; TEST 000: empty - fil .000 - loc -98 - bne *1 - loc 123 - bne *1 - lin 0 - nop - loc 0 - ret WS -1 - lin 1 - nop - loc 1 - ret WS - end diff --git a/etc/pc_errors b/etc/pc_errors deleted file mode 100644 index 688e4b372..000000000 --- a/etc/pc_errors +++ /dev/null @@ -1,289 +0,0 @@ -non-standard feature used -identifier '%s' declared twice -end of file encountered -bad line directive -unsigned real: digit of fraction expected -unsigned real: digit of exponent expected -unsigned real: too many digits (>72) -unsigned integer: too many digits (>72) -unsigned integer: overflow (>32767) -string constant: must not exceed one line -string constant: at least one character expected -string constant: double quotes not allowed (see c option) -string constant: too long (>72 chars) -bad character -identifier '%s' not declared -location counter overflow: arrays too big -location counter overflow: arrays too big -arraysize too big -variable '%s' never used -variable '%s' never assigned -the files contained in '%s' are not closed automatically -constant expected -constant: only integers and reals may be signed -constant: out of bounds -simple type expected -enumerated type: element identifier expected -enumerated type: ',' or ')' expected -enumerated type: ',' expected -enumerated type: ')' expected -subrange type: type must be scalar, but not real -subrange type: '..' expected -subrange type: type of lower and upper bound incompatible -subrange type: lower bound exceeds upper bound -array type: '[' expected -conformant array: low bound identifier expected -conformant array: '..' expected -conformant array: high bound identifier expected -conformant array: ':' expected -conformant array: index type identifier expected -array type: index type not bounded -array type: index separator or ']' expected -array type: index separator expected -array type: ']' expected -array type: 'of' expected -record variant part: tag type identifier expected -record variant part: tag type identifier expected -record variant part: type must be bounded -record variant part: 'of' expected -record variant: type of case label and tag incompatible -record variant: multiple defined case label -record variant: ',' or ':' expected -record variant: ',' expected -record variant: ':' expected -record variant: '(' expected -record variant: ')' expected -record variant part: ';' or end of variant list expected -record variant part: ';' expected -record variant part: end of variant list expected -record variant part: there must be a variant for each tag value -field list: record section expected -record section: field identifier expected -record section: ',' or ':' expected -record section: ',' expected -record section: ':' expected -field list: ';' or end of record section list expected -field list: ';' expected -field list: end of record section list expected -type expected -type: simple and pointer type may not be packed -pointer type: type identifier expected -pointer type: type identifier expected -record type: 'end' expected -set type: 'of' expected -set type: too many elements in set -set type: bad subrange of integer -set of integer: the i option dictates the number of bits (default 16) -set type: base type not bounded -file type: 'of' expected -file type: files within files not allowed -var parameter: type identifier or conformant array expected -var parameter: type identifier expected -label declaration: unsigned integer expected -label declaration: label '%i' multiple declared -label declaration: ',' or ';' expected -label declaration: ',' expected -label declaration: ';' expected -const declaration: constant identifier expected -const declaration: '=' expected -const declaration: ';' expected -const declaration: constant identifier or 'type', 'var', 'procedure', 'function' or 'begin' expected -type declaration: type identifier expected -type declaration: '=' expected -type declaration: ';' expected -type declaration: type identifier or 'var', 'procedure', 'function' or 'begin' expected -var declaration: var identifier expected -var declaration: ',' or ':' expected -var declaration: ',' expected -var declaration: ':' expected -var declaration: ';' expected -var declaration: var identifier or 'procedure', 'function' or 'begin' expected -parameter list: 'var','procedure','function' or identifier expected -parameter list: parameter identifier expected -parameter list: ',' or ':' expected -parameter list: ',' expected -parameter list: ':' expected -parameter list: type identifier expected -parameter list: ';' or ')' expected -parameter list: ';' expected -proc/func declaration: proc/func identifier expected -proc/func declaration: previous declaration of '%s' was not forward -proc/func declaration: parameter list expected -parameterlist: ')' expected -func declaration: ':' expected -func declaration: result type identifier expected -func declaration: result type must be scalar, subrange or pointer -proc/func declaration: ';' expected -proc/func declaration: block or directive expected -proc/func declaration: '%s' unknown directive -proc/func declaration: '%s' again forward declared -proc/func declaration: ';' expected -indexed variable: '[' only allowed following array variables -indexed variable: index type not compatible with declaration -indexed variable: ',' or ']' expected -indexed variable: ',' expected -assignment: standard function not allowed as destination -assignment: cannot store the function result -assignment: formal parameter function not allowed as destination -assignment: function identifier may not be de-referenced -variable: '[', '.', '^' or end of variable expected -indexed variable: ']' expected -field designator: field identifier expected -field designator: '.' only allowed following record variables -field designator: no field '%s' in this record -referenced variable: '^' not allowed following zero-terminated strings -referenced variable: '^' only allowed following pointer or file variables -variable: var or field identifier expected -call: too many actual parameters supplied -call: proc/func identifier expected -call: standard proc/func may not be used as parameter -call: parameter lists of actual and formal proc/func incompatible -call: type of actual and formal value parameter not compatible -call: array parameter not conformable -call: type of actual and formal variable parameter not similar -call: packed elements not allowed as variable parameter -call: ',' or ')' expected -call: too few actual parameters supplied -read(ln): type must be integer, char or real -write(ln): type must be integer, char, real, string or boolean -write(ln): ':', ',' or ')' expected -write(ln): field width must be integer -write(ln): ':', ',' or ')' expected -write(ln): precision must be integer -write(ln): precision may only be specified for reals -read/write: too few actual parameters supplied -read/write: standard input/output not mentioned in program heading -read/write: ',' or ')' expected -read/write: type of parameter not the same as that of the file elements -read/write: parameter list expected -readln/writeln: standard input/output not mentioned in program heading -readln/writeln: only allowed on text files -new/dispose: C-type strings not allowed here -new/dispose: ',' or ')' expected -new/dispose: too many actual parameters supplied -new/dispose: type of tagfield value is incompatible with declaration -call: '(' or end of call expected -standard proc/func: parameter list expected -standard input/output not mentioned in program heading -file variable expected -pointer variable expected -pack: ',' expected -pack: ',' expected -unpack: ',' expected -unpack: ',' expected -standard proc/func: parameter type incompatible with specification -eoln/page: text file variable expected -pack/unpack: array types are incompatible -pack/unpack: only for arrays -abs: integer or real expected -sqr: integer or real expected -ord: type must be scalar or subrange, but not real -pred/succ: type must be scalar or subrange, but not real -trunc/round: real argument required -call: ')' expected -expression: left and right operand are incompatible -set: incompatible elements -set: base type must be bounded or of type integer -set: base type upper bound exceeds maximum set element number -set: element out of range -set: ']' or element list expected -set: '..', ',' or ']' expected -set: ',' or ']' expected -set: ',' expected -factor expected -factor: ')' expected -factor: type of factor must be boolean -set: ']' expected -term: multiplying operator or end of term expected -term: '*' only defined for integers, reals and sets -term: '/' only defined for integers and reals -term: 'div' only defined for integers -term: 'mod' only defined for integers -term: 'and' only defined for booleans -simple expression: only integers and reals may be signed -simple expression: adding operator or end of simple expression expected -simple expression: '+' only defined for integers, reals and sets -simple expression: '-' only defined for integers, reals and sets -simple expression: 'or' only defined for booleans -expression: relational operator or end of expression expected -expression: set expected -expression: left operand of 'in' not compatible with base type of right operand -expression: only '=' and '<>' allowed on pointers -expression: '<' and '>' not allowed on sets -expression: comparison of arrays only allowed for strings -expression: comparison of records not allowed -expression: comparison of files not allowed -assignment: ':=' expected -assignment: left and right hand side incompatible -goto statement: unsigned integer expected -goto statement: label '%i' not declared -if statement: type of expression must be boolean -if statement: 'then' expected -if statement: 'else' or end of if statement expected -case statement: type must be scalar or subrange, but not real -case statement: 'of' expected -case statement: incompatible case label -case statement: multiple defined case label -case statement: ',' or ':' expected -case statement: ',' expected -case statement: ':' expected -case statement: ';' or 'end' expected -case statement: ';' expected -case statement: 'end' expected -repeat statement: ';' or 'until' expected -repeat statement: ';' expected -repeat statement: 'until' expected -repeat statement: type of expression must be boolean -while statement: type of expression must be boolean -while statement: 'do' expected -for statement: type of bound and control variable incompatible -for statement: control variable expected -for statement: control variable must be local -for statement: type must be scalar or subrange, but not real -for statement: ':=' expected -for statement: 'to' or 'downto' expected -for statement: upper bound not assignment compatible -for statement: 'do' expected -with statement: record variable expected -with statement: ',' or 'do' expected -with statement: ',' expected -with statement: 'do' expected -assertion: type of expression must be boolean -statement expected -label '%i' not declared -label '%i' multiple defined -statement: ':' expected -unlabeled statement expected -compound statement: ';' or 'end' expected -compound statement: ';' expected -compound statement: 'end' expected -case statement: 'end' expected -body: ';' or 'end' expected -body: ';' expected -body: label '%i' declared, but never defined -program parameter '%s' not declared -function '%s' never assigned -block: declaration or body expected -block: 'const', 'type', 'var', 'procedure', 'function' or 'begin' expected -block: 'type', 'var', 'procedure', 'function' or 'begin' expected -block: 'var', 'procedure', 'function' or 'begin' expected -block: 'procedure', 'function' or 'begin' expected -block: unsatisfied forward proc/func declaration(s) -block: 'begin' expected -block: 'end' expected -program heading: 'program' expected -program heading: program identifier expected -program heading: file identifier list expected -program heading: file identifier expected -program heading: ',' or ')' expected -program heading: ',' expected -program heading: maximum number of file arguments exceeded (12) -program heading: ')' expected -program heading: ';' expected -program: '.' expected -'program' expected -module: 'const', 'type', 'var', 'procedure' or 'function' expected -module: 'type', 'var', 'procedure' or 'function' expected -module: 'var', 'procedure' or 'function' expected -module: 'procedure' or 'function' expected -garbage at end of program diff --git a/etc/pc_rt_errors b/etc/pc_rt_errors deleted file mode 100644 index 530604965..000000000 --- a/etc/pc_rt_errors +++ /dev/null @@ -1,107 +0,0 @@ -array bound error -range bound error -set bound error -integer overflow -real overflow -real underflow -divide by 0 -divide by 0.0 -undefined integer -real undefined -conversion error -error 11 -error 12 -error 13 -error 14 -error 15 -stack overflow -heap error -illegal instruction -odd or zero byte count -case error -memory fault -bad pointer -bad program counter -bad external address -bad monitor call -bad line number -error 27 -error 28 -error 29 -error 30 -error 31 -error 32 -error 33 -error 34 -error 35 -error 36 -error 37 -error 38 -error 39 -error 40 -error 41 -error 42 -error 43 -error 44 -error 45 -error 46 -error 47 -error 48 -error 49 -error 50 -error 51 -error 52 -error 53 -error 54 -error 55 -error 56 -error 57 -error 58 -error 59 -error 60 -error 61 -error 62 -error 63 -more args expected -error in exp -error in ln -error in sqrt -assertion failed -array bound error in pack -array bound error in unpack -only positive j in 'i mod j' -file not yet open -dispose error -error 74 -error 75 -error 76 -error 77 -error 78 -error 79 -error 80 -error 81 -error 82 -error 83 -error 84 -error 85 -error 86 -error 87 -error 88 -error 89 -error 90 -error 91 -error 92 -error 93 -error 94 -error 95 -not writable -not readable -end of file -truncated -reset error -rewrite error -close error -read error -write error -digit expected -non-ASCII char read diff --git a/first/cc.xenix.src b/first/cc.xenix.src deleted file mode 100644 index b178c0812..000000000 --- a/first/cc.xenix.src +++ /dev/null @@ -1,70 +0,0 @@ -trap "rm -f x$$.c" 0 1 2 3 15 -EMHOME=/usr/em -CFLAG=0 -TARGET=a.out -while : -do - case $# in - 0) break;; - esac - case $1 in - -I*|-D*|-U*) - PREP=$PREP" "$1 - ;; - -c) CFLAG=1 - ;; - -o) shift - TARGET=$1 - ;; - -F) shift - LFLAG="-F $1" - ;; - -*) FLAGS=$FLAGS" "$1 - ;; - *) ARG=$ARG" "$1 - ;; - esac - shift -done -for i in $ARG -do - case $i in - *.c) - nm=`basename $i .c` - if [ -x $EMHOME/lib/cpp ] - then - cpp=$EMHOME/lib/cpp - cppf=-P - else - cpp=/bin/cc - cppf=-E - fi - if $cpp $cppf $PREP $i > x$$.c && /bin/cc $FLAGS -c x$$.c - then - mv x$$.o $nm.o - LDARG=$LDARG" "$nm.o - else - rm -f x$$.c - exit 1 - fi - rm -f x$$.c - ;; - *.s) - if /bin/cc $FLAGS -c $i - then - LDARG=$LDARG" "`basename $i .s`.o - else exit 1 - fi - ;; - *) LDARG=$LDARG" "$i - ;; - esac -done -case $CFLAG in -1) ;; -*) if /bin/cc $FLAGS $LFLAG $LDARG -o $TARGET - then : - else exit 1 - fi - ;; -esac diff --git a/first/ckpath b/first/ckpath deleted file mode 100644 index 57eb47235..000000000 --- a/first/ckpath +++ /dev/null @@ -1,67 +0,0 @@ -rm -f ../bin/x_tpath x_tpath -echo 'Checking out your $PATH; . and $ACK/bin should be in front ...' -echo "echo $$" >../bin/x_tpath -rm -f x_tpath -chmod +x ../bin/x_tpath -case x`(x_tpath) 2>/dev/null` -in -x$$) - STAT=0 ;; -x) - (cd ../bin ; echo Sorry, `pwd` is not in your shell PATH" ($PATH)") - STAT=1 ;; -*) - echo "Sorry, there is something wrong with your PATH ($PATH)" ;; -esac -echo "echo t_$$" > X_Y_Z_ -chmod +x X_Y_Z_ -case x`X_Y_Z_` -in -xt_$$) - ;; -x) - (cd ../bin ; echo Sorry, . is not in your shell PATH" ($PATH)") - STAT=2 ;; -*) - echo "Sorry, there is something wrong with your PATH ($PATH)" ;; -esac -rm -f X_Y_Z_ -case $STAT -in -2) - ;; -*) - hash -r ;; -esac -echo "echo l_$$" >x_tpath -chmod +x x_tpath -case x`(x_tpath) 2>/dev/null` -in -xl_$$) - ;; -x) - (cd ../bin ; echo Sorry, . is not in your shell PATH" ($PATH)") - STAT=2 ;; -x$$) - echo Sorry, . is not in your PATH" ($PATH)" or after the ACK bin directory - STAT=3 ;; -*) - echo "Sorry, there is something wrong with your PATH ($PATH)" - STAT=4 ;; -esac -rm -f ../bin/x_tpath x_tpath -echo "echo 93" > ../bin/cat -chmod +x ../bin/cat -hash -r -case x`cat < /dev/null 2>/dev/null` -in -x93) - rm -f ../bin/cat - ;; -*) - rm -f ../bin/cat - (cd ../bin ; echo Sorry, `pwd` comes too late in your PATH" ($PATH)" ) - STAT=13 - ;; -esac -exit $STAT diff --git a/first/did_first b/first/did_first deleted file mode 100755 index f0d920a97..000000000 --- a/first/did_first +++ /dev/null @@ -1,7 +0,0 @@ -if (ack_sys ) >/dev/null 2>&1 -then - exit 0 -else - echo "You need to run 'first' first" - exit 1 -fi diff --git a/first/fixlexlib b/first/fixlexlib deleted file mode 100755 index f7c53825c..000000000 --- a/first/fixlexlib +++ /dev/null @@ -1,75 +0,0 @@ -FL=succes -TRIES= -case X$# in -X0) - if (.Xlex) > /dev/null 2>&1 - then - TRY=`.Xlex` - else TRY=-lln - fi - echo "trying to find your lex library ..." - cat > x.l <<'EOF' -%% -[A-Z] putchar(yytext[0]+'a'-'A'); -EOF - if lex x.l > /dev/null 2>&1 && cc -c lex.yy.c > /dev/null 2>&1 - then : - else echo "Sorry, your lex does not seem to work" - exit 2 - fi - cat > trylib <<'EOF' -if cc lex.yy.o $1 > /dev/null 2>&1 -then - rm -f lex.yy.* a.out - exit 0 -else - exit 1 -fi -EOF - if sh trylib $TRY - then - LEX=$TRY - else - exec $0 -ll $TRY - fi - ;; -*) if sh trylib $1 - then - LEX=$1 - else - TRIES="$2 and $1" - FL=fail - fi - ;; -esac -case X$FL in -Xfail) echo 'What option do I have to give to cc to get the LEX library?' - echo "I tried " $TRIES "but these don't seem to work." - echo -n 'LEX library option: ' - if read ANSWER - then : - else echo "Sorry, got EOF while reading your answer" - exit 9 - fi - exec $0 $ANSWER "$TRIES" - ;; -Xsucces) - for i in ../util/opt ../util/cgg ../util/ncgg ../lang/occam/comp ../modules/src/em_opt ../util/ceg/as_parser - do - ( cd $i - cp Makefile makefile - ed - makefile << EOF -/^LEXLIB/c -LEXLIB = $LEX -. -w -q -EOF - ) - done - ;; -esac -rm -f x.l trylib lex.yy.* -echo echo "$LEX" > .Xlex -chmod +x .Xlex -echo "apparently, \"cc ... $LEX\" works" diff --git a/first/hash b/first/hash deleted file mode 100755 index e69de29bb..000000000 diff --git a/first/myecho.c b/first/myecho.c deleted file mode 100644 index d74c09a38..000000000 --- a/first/myecho.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -main(argc, argv) - int argc; - char *argv[]; -{ - int nflag = 0; - - if(argc > 1 && ! strncmp(argv[1], "-n", 2)) { - nflag++; - argc--; - argv++; - } - while (--argc > 0) { - fputs(argv[1], stdout); - argv++; - if (argc > 1) putchar(' '); - } - if (!nflag) putchar('\n'); - exit(0); -} diff --git a/h/pc_size.h b/h/pc_size.h deleted file mode 100644 index b0eb5f744..000000000 --- a/h/pc_size.h +++ /dev/null @@ -1,26 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ - -/*fundamental */ -#define sz_byte 1 -#define sz_bool 1 -#define sz_char 1 - -/* target machine characteristics */ -/* variable (see pc.c) */ -#define sz_addr sizes[0] -#define sz_real sizes[1] -#define sz_head sizes[2] -#define sz_buff sizes[3] -#define sz_mset sizes[4] -#define sz_iset sizes[5] -#define sz_word sizes[6] -#define sz_int sizes[7] -#define sz_long sizes[8] - -#define sz_last 8 - -#define sz_proc 2*sz_addr diff --git a/include/_tail_cc/termio.h b/include/_tail_cc/termio.h deleted file mode 100644 index c8224a76c..000000000 --- a/include/_tail_cc/termio.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef __CHANNEL__ -#define NCC 8 - -#define VMIN 4 -#define VTIME 5 - -#define ICRNL 0000400 - -#define ONLCR 0000004 - -#define ICANON 0000002 -#define ECHO 0000010 - -struct termio { - unsigned short c_iflag; - unsigned short c_oflag; - unsigned short c_cflag; - unsigned short c_lflag; - char c_line; - unsigned char c_cc[NCC]; -}; - -#define TIOC ('T'<<8) -#define TCGETA (TIOC|1) -#define TCSETA (TIOC|2) -#else -#include "/usr/include/termio.h" -#endif diff --git a/lang/basic/src/Makefile b/lang/basic/src/Makefile deleted file mode 100644 index f1d61a490..000000000 --- a/lang/basic/src/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# $Header$ - -EMHOME=../../.. -h=$(EMHOME)/h -m=$(EMHOME)/modules/h -LIBDIR= $(EMHOME)/modules/lib -LIBDIR2= $(EMHOME)/lib -CFLAGS = -I$h -I$m -O - -FILES= bem.o symbols.o initialize.o compile.o \ - parsepar.o gencode.o util.o graph.o \ - eval.o func.o basic.o Lpars.o - -CSRCFILES= bem.c symbols.c initialize.c compile.c \ - parsepar.c gencode.c util.c graph.c \ - eval.c func.c -CGENFILES= basic.c Lpars.c -CFILES=$(CSRCFILES) $(CGENFILES) - -LIBFILES= $(LIBDIR)/libem_mes.a $(LIBDIR)/libemk.a \ - $(LIBDIR2)/em_data.a $(LIBDIR)/libprint.a \ - $(LIBDIR)/liballoc.a \ - $(LIBDIR)/libsystem.a $(LIBDIR)/libstring.a - -LINTLIBFILES= $(LIBDIR)/llib-lem_mes.ln $(LIBDIR)/llib-lemk.ln \ - $(LIBDIR)/llib-lprint.ln \ - $(LIBDIR)/llib-lalloc.ln \ - $(LIBDIR)/llib-lsystem.ln $(LIBDIR)/llib-lstring.ln - -all: dummy bem - -dummy: basic.g - LLgen basic.g - touch dummy - -install: all - cp bem $(EMHOME)/lib/em_bem - -cmp: all - cmp bem $(EMHOME)/lib/em_bem - -pr: - @pr Makefile maketokentab bem.h symbols.h graph.h basic.g basic.lex $(CSRCFILES) - -opr: - make pr | opr - -bem: $(FILES) $(LIBFILES) - $(CC) -o bem $(FILES) $(LIBFILES) - -basic.o : basic.c basic.lex Lpars.h llmess.c tokentab.h - $(CC) $(CFLAGS) -c basic.c - -$(FILES): bem.h symbols.h graph.h - -tokentab.h: Lpars.h - maketokentab - -lint: dummy $(CFILES) tokentab.h - lint -b $(CFLAGS) $(CFILES) $(LINTLIBFILES) - -clean: - rm -f *.o - rm -f basic.c Lpars.h Lpars.c dummy tokentab.h bem diff --git a/lang/cem/cemcom.ansi/LintPars b/lang/cem/cemcom.ansi/LintPars deleted file mode 100644 index 46f66e2a8..000000000 --- a/lang/cem/cemcom.ansi/LintPars +++ /dev/null @@ -1,143 +0,0 @@ -!File: lint.h -#define LINT 1 /* if defined, 'lint' is produced */ -#define ANSI 1 /* tell l_* files it's ANSI */ - - -!File: pathlength.h -#define PATHLENGTH 1024 /* max. length of path to file */ - - -!File: errout.h -#define ERROUT STDERR /* file pointer for writing messages */ -#define ERR_SHADOW 0 /* a syntax error overshadows error messages - until ERR_SHADOW symbols have been - accepted without syntax error */ - - -!File: idfsize.h -#define IDFSIZE 64 /* maximum significant length of an identifier */ - - -!File: numsize.h -#define NUMSIZE 256 /* maximum length of a numeric constant */ - - -!File: nparams.h -#define NPARAMS 32 /* maximum number of parameters */ -#define STDC_NPARAMS 31 /* ANSI limit on number of parameters */ - - -!File: ifdepth.h -#define IFDEPTH 256 /* maximum number of nested if-constructions */ - - -!File: density.h -#define DENSITY 2 /* see switch.[ch] for an explanation */ - - -!File: macbuf.h -#define LAPBUF 128 /* initial size of macro replacement buffer */ -#define ARGBUF 128 /* initial size of macro parameter buffer(s) */ - - -!File: strsize.h -#define ISTRSIZE 32 /* minimum number of bytes allocated for - storing a string */ -#define RSTRSIZE 16 /* step size in enlarging the memory for - the storage of a string */ - - -!File: trgt_sizes.h -#define MAXSIZE 8 /* the maximum of the SZ_* constants */ - -/* target machine sizes */ -#define SZ_CHAR 1 -#define SZ_SHORT 2 -#define SZ_WORD 4 -#define SZ_INT 4 -#define SZ_LONG 4 -#define SZ_FLOAT 4 -#define SZ_DOUBLE 8 -#define SZ_POINTER 4 -#define SZ_LNGDBL 8 /* for now */ - -/* target machine alignment requirements */ -#define AL_CHAR 1 -#define AL_SHORT SZ_SHORT -#define AL_WORD SZ_WORD -#define AL_INT SZ_WORD -#define AL_LONG SZ_WORD -#define AL_FLOAT SZ_WORD -#define AL_DOUBLE SZ_WORD -#define AL_LNGDBL SZ_WORD -#define AL_POINTER SZ_WORD -#define AL_STRUCT 1 -#define AL_UNION 1 - - -!File: botch_free.h -#undef BOTCH_FREE 1 /* when defined, botch freed memory, as a check */ - - -!File: dataflow.h -#undef DATAFLOW 1 /* produce some compile-time xref */ - - -!File: debug.h -#undef DEBUG 1 /* perform various self-tests */ - - -!File: use_tmp.h -#undef PREPEND_SCOPES 1 /* collect exa, exp, ina and inp commands - and if USE_TMP is defined let them - precede the rest of the generated - compact code */ -#undef USE_TMP 1 /* use C_insertpart, C_endpart mechanism - to generate EM-code in the order needed - for the code-generators. If not defined, - the old-style peephole optimizer is - needed. */ - - -!File: parbufsize.h -#define PARBUFSIZE 1024 - - -!File: textsize.h -#define ITEXTSIZE 32 /* 1st piece of memory for repl. text */ - - -!File: inputtype.h -#define INP_READ_IN_ONE 1 /* read input file in one */ - - -!File: nopp.h -#undef NOPP 1 /* if NOT defined, use built-int preprocessor */ - - -!File: nobitfield.h -#undef NOBITFIELD 1 /* if NOT defined, implement bitfields */ - - -!File: spec_arith.h -/* describes internal compiler arithmetics */ -#undef SPECIAL_ARITHMETICS /* something different from native long */ -#undef UNSIGNED_ARITH unsigned arith - - -!File: static.h -#define GSTATIC /* for large global "static" arrays */ - - -!File: nocross.h -#undef NOCROSS 1 /* if NOT defined, cross compiler */ - - -!File: regcount.h -#undef REGCOUNT 1 /* count occurrences for register messages */ - - -!File: dbsymtab.h -#undef DBSYMTAB 1 /* ability to produce symbol table for debugger */ - - diff --git a/lang/cem/cemcom.ansi/Makefile.erik b/lang/cem/cemcom.ansi/Makefile.erik deleted file mode 100644 index 195e07fca..000000000 --- a/lang/cem/cemcom.ansi/Makefile.erik +++ /dev/null @@ -1,718 +0,0 @@ -# $Header$ -# M A K E F I L E F O R A C K C - C O M P I L E R - -# Machine and environ dependent definitions -EMHOME = /usr/em# # ACK tree on this machine -DESTINATION = /user1/$$USER/bin# # where to put the stuff -MKDEP = $(EMHOME)/bin/mkdep# # dependency generator -MAP = -#MAP = -DInsertFile=ins_file -DInsertText=ins_text# bug in m68k2 back end -SIM = /user1/dick/bin/sim# # Dicks sim program -LINT = /usr/new/lint - -# Libraries and EM interface definitions -SYSLIB = $(EMHOME)/modules/lib/libsystem.a -EMKLIB = $(EMHOME)/modules/lib/libemk.a -EMELIB = $(EMHOME)/modules/lib/libeme.a $(EMHOME)/lib/em_data.a -STRLIB = $(EMHOME)/modules/lib/libstring.a -PRTLIB = $(EMHOME)/modules/lib/libprint.a -EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a -INPLIB = $(EMHOME)/modules/lib/libinput.a -ALLOCLIB = $(EMHOME)/modules/lib/liballoc.a -MALLOC = $(EMHOME)/modules/lib/malloc.o -#CH3LIB = $(EMHOME)/modules/lib/libch3.a -CH3LIB = -LIBS = $(INPLIB) $(CH3LIB) $(EMMESLIB) $(EMKLIB) \ - $(PRTLIB) $(STRLIB) $(ALLOCLIB) $(MALLOC) $(SYSLIB) -ELIBS = $(INPLIB) $(CH3LIB) $(EMMESLIB) $(EMELIB) \ - $(PRTLIB) $(STRLIB) $(ALLOCLIB) $(MALLOC) $(SYSLIB) -LIB_INCLUDES = -I$(EMHOME)/modules/h -I$(EMHOME)/modules/pkg -EM_INCLUDES = -I$(EMHOME)/h -SYSLLIB = $(EMHOME)/modules/lib/llib-lsys.ln -EMKLLIB = $(EMHOME)/modules/lib/llib-lemk.ln -EMELLIB = $(EMHOME)/modules/lib/llib-leme.ln -STRLLIB = $(EMHOME)/modules/lib/llib-lstr.ln -PRTLLIB = $(EMHOME)/modules/lib/llib-lprint.ln -EMMESLLIB = $(EMHOME)/modules/lib/llib-lmes.ln -INPLLIB = $(EMHOME)/modules/lib/llib-linput.ln -CH3LLIB = $(EMHOME)/modules/lib/llib-lch3.ln -ALLOCLLIB = $(EMHOME)/modules/lib/llib-alloc.ln -LINTLIBS = -#LINTLIBS = $(CH3LLIB) $(INPLLIB) $(EMMESLLIB) $(EMKLLIB) \ -# $(PRTLLIB) $(STRLLIB) $(SYSLLIB) $(ALLOCLLIB) - -# Where to install the compiler and its driver -CEMCOM = $(DESTINATION)/cemcom -DRIVER = $(DESTINATION)/cem - -# What C compiler to use and how -# CC = $(ACK) -.c -# CC = CC -# CC = /bin/cc -COPTIONS = - -# What parser generator to use and how -GEN = $(EMHOME)/bin/LLgen -GENOPTIONS = -vv - -# Special #defines during compilation -CDEFS = $(MAP) $(EM_INCLUDES) $(LIB_INCLUDES) -CFLAGS = $(CDEFS) $(COPTIONS) -O# we cannot pass the COPTIONS to lint! - -# Grammar files and their objects -LSRC = tokenfile.g declar.g statement.g expression.g program.g ival.g -GLCSRC = tokenfile.c declar.c statement.c expression.c program.c Lpars.c ival.c -LOBJ = tokenfile.o declar.o statement.o expression.o program.o Lpars.o ival.o - -CSRC = main.c idf.c declarator.c decspecs.c struct.c \ - expr.c ch7.c ch7bin.c cstoper.c arith.c \ - asm.c code.c dumpidf.c error.c field.c\ - tokenname.c LLlex.c LLmessage.c \ - input.c domacro.c replace.c init.c options.c \ - scan.c skip.c stack.c type.c ch7mon.c label.c eval.c \ - switch.c conversion.c util.c \ - blocks.c dataflow.c Version.c -# Objects of hand-written C files -COBJ = main.o idf.o declarator.o decspecs.o struct.o \ - expr.o ch7.o ch7bin.o cstoper.o arith.o \ - asm.o code.o dumpidf.o error.o field.o\ - tokenname.o LLlex.o LLmessage.o \ - input.o domacro.o replace.o init.o options.o \ - scan.o skip.o stack.o type.o ch7mon.o label.o eval.o \ - switch.o conversion.o util.o \ - blocks.o dataflow.o Version.o - -# Objects of other generated C files -GCSRC = char.c symbol2str.c next.c -GOBJ = char.o symbol2str.o next.o - -# generated source files -GSRC = char.c symbol2str.c next.c \ - code.h declar.h decspecs.h def.h expr.h field.h estack.h \ - idf.h macro.h stack.h stmt.h struct.h switch.h type.h util.h - -# .h files generated by `make hfiles'; PLEASE KEEP THIS UP-TO-DATE! -GHSRC = botch_free.h dataflow.h debug.h density.h errout.h \ - idfsize.h ifdepth.h inputtype.h inumlength.h lapbuf.h \ - nobitfield.h nofloat.h nopp.h noRoption.h nocross.h \ - nparams.h numsize.h parbufsize.h pathlength.h \ - strsize.h target_sizes.h textsize.h use_tmp.h spec_arith.h static.h \ - reg_count.h - -# Other generated files, for 'make clean' only -GENERATED = tokenfile.g Lpars.h LLfiles LL.output lint.out \ - print Xref lxref hfiles cfiles $(GLCSRC) - -# include files containing ALLOCDEF specifications -NEXTFILES = code.str declar.str decspecs.str def.str expr.str field.str \ - estack.str util.str \ - idf.str macro.str stack.str stmt.str struct.str switch.str type.str - -.SUFFIXES: .str .h -.str.h: - ./make.allocd <$*.str >$*.h - -all: cc - -cc: - make "EMHOME="$(EMHOME) "CC=$(CC)" hfiles - make "EMHOME="$(EMHOME) "CC=$(CC)" LLfiles - make "EMHOME="$(EMHOME) "CC=$(CC)" main - -cem: cem.c - $(CC) -O cem.c $(SYSLIB) -o cem - -lint.cem: cem.c - $(LINT) -bx cem.c - -hfiles: ./make.hfiles Parameters - ./make.hfiles Parameters - @touch hfiles - -LLfiles: $(LSRC) - $(GEN) $(GENOPTIONS) $(LSRC) - @touch LLfiles - -tokenfile.g: tokenname.c make.tokfile - tokenfile.g - -symbol2str.c: tokenname.c make.tokcase - symbol2str.c - -char.c: char.tab - $(EMHOME)/bin/tabgen -fchar.tab >char.c - -next.c: make.next $(NEXTFILES) - ./make.next $(NEXTFILES) >next.c - -code.h: make.allocd -declar.h: make.allocd -decspecs.h: make.allocd -def.h: make.allocd -estack.h: make.allocd -expr.h: make.allocd -field.h: make.allocd -idf.h: make.allocd -macro.h: make.allocd -stack.h: make.allocd -stmt.h: make.allocd -struct.h: make.allocd -switch.h: make.allocd -type.h: make.allocd -util.h: make.allocd - -# Objects needed for 'main' -OBJ = $(COBJ) $(LOBJ) $(GOBJ) -SRC = $(CSRC) $(LCSRC) $(GCSRC) - -main: $(OBJ) Makefile.erik - $(CC) $(COPTIONS) $(LFLAGS) $(OBJ) $(LIBS) -o main - size main - -emain: $(OBJ) Makefile.erik - $(CC) $(COPTIONS) $(LFLAGS) $(OBJ) $(ELIBS) -o emain - size emain - -cfiles: hfiles LLfiles $(GSRC) - @touch cfiles - -install: main cem - cp main $(CEMCOM) - cp cem $(DRIVER) - -print: files - pr `cat files` > print - -tags: cfiles - ctags $(SRC) - -shar: files - shar `cat files` - -listcfiles: - @echo $(SRC) - -listobjects: - @echo $(OBJ) - -depend: cfiles - sed '/^#AUTOAUTO/,$$d' Makefile.erik >Makefile.erik.new - echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >>Makefile.erik.new - $(MKDEP) $(SRC) | sed 's/\.c:/.o:/' >>Makefile.erik.new - mv Makefile.erik Makefile.erik.old - mv Makefile.erik.new Makefile.erik - -xref: - ctags -x `grep "\.[ch]" files`|sed "s/).*/)/">Xref - -lxref: - lxref $(OBJ) -lc >lxref - -lint: lint.main lint.cem - -lint.main: cfiles - $(LINT) -bx $(CDEFS) $(SRC) $(LINTLIBS) >lint.out - -cchk: - cchk $(SRC) - -clean: - rm -f $(LCSRC) $(OBJ) $(GENERATED) $(GSRC) $(GHSRC) - -sim: cfiles - $(SIM) $(SIMFLAGS) $(CSRC) $(GSRC) $(LSRC) - -#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO -main.o: LLlex.h -main.o: Lpars.h -main.o: align.h -main.o: arith.h -main.o: debug.h -main.o: declar.h -main.o: file_info.h -main.o: idf.h -main.o: input.h -main.o: inputtype.h -main.o: level.h -main.o: noRoption.h -main.o: nobitfield.h -main.o: nocross.h -main.o: nofloat.h -main.o: nopp.h -main.o: sizes.h -main.o: spec_arith.h -main.o: specials.h -main.o: target_sizes.h -main.o: tokenname.h -main.o: type.h -main.o: use_tmp.h -idf.o: LLlex.h -idf.o: Lpars.h -idf.o: align.h -idf.o: arith.h -idf.o: assert.h -idf.o: botch_free.h -idf.o: debug.h -idf.o: declar.h -idf.o: decspecs.h -idf.o: def.h -idf.o: file_info.h -idf.o: idf.h -idf.o: idfsize.h -idf.o: label.h -idf.o: level.h -idf.o: noRoption.h -idf.o: nobitfield.h -idf.o: nocross.h -idf.o: nofloat.h -idf.o: nopp.h -idf.o: sizes.h -idf.o: spec_arith.h -idf.o: specials.h -idf.o: stack.h -idf.o: struct.h -idf.o: target_sizes.h -idf.o: type.h -declarator.o: Lpars.h -declarator.o: arith.h -declarator.o: botch_free.h -declarator.o: declar.h -declarator.o: expr.h -declarator.o: idf.h -declarator.o: label.h -declarator.o: nobitfield.h -declarator.o: nocross.h -declarator.o: nofloat.h -declarator.o: nopp.h -declarator.o: sizes.h -declarator.o: spec_arith.h -declarator.o: target_sizes.h -declarator.o: type.h -decspecs.o: Lpars.h -decspecs.o: arith.h -decspecs.o: decspecs.h -decspecs.o: def.h -decspecs.o: level.h -decspecs.o: noRoption.h -decspecs.o: nobitfield.h -decspecs.o: nofloat.h -decspecs.o: spec_arith.h -decspecs.o: type.h -struct.o: LLlex.h -struct.o: Lpars.h -struct.o: align.h -struct.o: arith.h -struct.o: assert.h -struct.o: botch_free.h -struct.o: debug.h -struct.o: def.h -struct.o: field.h -struct.o: file_info.h -struct.o: idf.h -struct.o: level.h -struct.o: noRoption.h -struct.o: nobitfield.h -struct.o: nocross.h -struct.o: nofloat.h -struct.o: nopp.h -struct.o: sizes.h -struct.o: spec_arith.h -struct.o: stack.h -struct.o: struct.h -struct.o: target_sizes.h -struct.o: type.h -expr.o: LLlex.h -expr.o: Lpars.h -expr.o: arith.h -expr.o: botch_free.h -expr.o: declar.h -expr.o: decspecs.h -expr.o: def.h -expr.o: expr.h -expr.o: file_info.h -expr.o: idf.h -expr.o: label.h -expr.o: level.h -expr.o: noRoption.h -expr.o: nobitfield.h -expr.o: nocross.h -expr.o: nofloat.h -expr.o: nopp.h -expr.o: sizes.h -expr.o: spec_arith.h -expr.o: target_sizes.h -expr.o: type.h -ch7.o: Lpars.h -ch7.o: arith.h -ch7.o: assert.h -ch7.o: debug.h -ch7.o: def.h -ch7.o: expr.h -ch7.o: idf.h -ch7.o: label.h -ch7.o: nobitfield.h -ch7.o: nofloat.h -ch7.o: nopp.h -ch7.o: spec_arith.h -ch7.o: struct.h -ch7.o: type.h -ch7bin.o: Lpars.h -ch7bin.o: arith.h -ch7bin.o: botch_free.h -ch7bin.o: expr.h -ch7bin.o: idf.h -ch7bin.o: label.h -ch7bin.o: noRoption.h -ch7bin.o: nobitfield.h -ch7bin.o: nofloat.h -ch7bin.o: nopp.h -ch7bin.o: spec_arith.h -ch7bin.o: struct.h -ch7bin.o: type.h -cstoper.o: Lpars.h -cstoper.o: arith.h -cstoper.o: assert.h -cstoper.o: debug.h -cstoper.o: expr.h -cstoper.o: idf.h -cstoper.o: label.h -cstoper.o: nobitfield.h -cstoper.o: nocross.h -cstoper.o: nofloat.h -cstoper.o: nopp.h -cstoper.o: sizes.h -cstoper.o: spec_arith.h -cstoper.o: target_sizes.h -cstoper.o: type.h -arith.o: Lpars.h -arith.o: arith.h -arith.o: botch_free.h -arith.o: expr.h -arith.o: field.h -arith.o: idf.h -arith.o: label.h -arith.o: mes.h -arith.o: noRoption.h -arith.o: nobitfield.h -arith.o: nofloat.h -arith.o: nopp.h -arith.o: spec_arith.h -arith.o: type.h -code.o: Lpars.h -code.o: arith.h -code.o: assert.h -code.o: atw.h -code.o: botch_free.h -code.o: code.h -code.o: dataflow.h -code.o: debug.h -code.o: declar.h -code.o: decspecs.h -code.o: def.h -code.o: expr.h -code.o: file_info.h -code.o: idf.h -code.o: label.h -code.o: level.h -code.o: noRoption.h -code.o: nobitfield.h -code.o: nocross.h -code.o: nofloat.h -code.o: nopp.h -code.o: sizes.h -code.o: spec_arith.h -code.o: specials.h -code.o: stack.h -code.o: stmt.h -code.o: target_sizes.h -code.o: type.h -code.o: use_tmp.h -dumpidf.o: Lpars.h -dumpidf.o: arith.h -dumpidf.o: debug.h -dumpidf.o: def.h -dumpidf.o: expr.h -dumpidf.o: field.h -dumpidf.o: idf.h -dumpidf.o: label.h -dumpidf.o: nobitfield.h -dumpidf.o: nofloat.h -dumpidf.o: nopp.h -dumpidf.o: spec_arith.h -dumpidf.o: stack.h -dumpidf.o: static.h -dumpidf.o: struct.h -dumpidf.o: type.h -error.o: LLlex.h -error.o: arith.h -error.o: debug.h -error.o: errout.h -error.o: expr.h -error.o: file_info.h -error.o: label.h -error.o: nofloat.h -error.o: nopp.h -error.o: spec_arith.h -error.o: tokenname.h -field.o: Lpars.h -field.o: align.h -field.o: arith.h -field.o: assert.h -field.o: code.h -field.o: debug.h -field.o: expr.h -field.o: field.h -field.o: idf.h -field.o: label.h -field.o: nobitfield.h -field.o: nocross.h -field.o: nofloat.h -field.o: nopp.h -field.o: sizes.h -field.o: spec_arith.h -field.o: target_sizes.h -field.o: type.h -tokenname.o: LLlex.h -tokenname.o: Lpars.h -tokenname.o: arith.h -tokenname.o: file_info.h -tokenname.o: idf.h -tokenname.o: nofloat.h -tokenname.o: nopp.h -tokenname.o: spec_arith.h -tokenname.o: tokenname.h -LLlex.o: LLlex.h -LLlex.o: Lpars.h -LLlex.o: arith.h -LLlex.o: assert.h -LLlex.o: class.h -LLlex.o: debug.h -LLlex.o: def.h -LLlex.o: file_info.h -LLlex.o: idf.h -LLlex.o: idfsize.h -LLlex.o: input.h -LLlex.o: nocross.h -LLlex.o: nofloat.h -LLlex.o: nopp.h -LLlex.o: numsize.h -LLlex.o: sizes.h -LLlex.o: spec_arith.h -LLlex.o: strsize.h -LLlex.o: target_sizes.h -LLmessage.o: LLlex.h -LLmessage.o: Lpars.h -LLmessage.o: arith.h -LLmessage.o: file_info.h -LLmessage.o: idf.h -LLmessage.o: nofloat.h -LLmessage.o: nopp.h -LLmessage.o: spec_arith.h -input.o: file_info.h -input.o: input.h -input.o: inputtype.h -input.o: nopp.h -domacro.o: LLlex.h -domacro.o: Lpars.h -domacro.o: arith.h -domacro.o: assert.h -domacro.o: botch_free.h -domacro.o: class.h -domacro.o: debug.h -domacro.o: file_info.h -domacro.o: idf.h -domacro.o: idfsize.h -domacro.o: ifdepth.h -domacro.o: input.h -domacro.o: interface.h -domacro.o: macro.h -domacro.o: nofloat.h -domacro.o: nopp.h -domacro.o: nparams.h -domacro.o: parbufsize.h -domacro.o: spec_arith.h -domacro.o: textsize.h -replace.o: LLlex.h -replace.o: arith.h -replace.o: assert.h -replace.o: class.h -replace.o: debug.h -replace.o: file_info.h -replace.o: idf.h -replace.o: input.h -replace.o: interface.h -replace.o: macro.h -replace.o: nofloat.h -replace.o: nopp.h -replace.o: pathlength.h -replace.o: spec_arith.h -replace.o: static.h -replace.o: strsize.h -init.o: class.h -init.o: idf.h -init.o: interface.h -init.o: macro.h -init.o: nopp.h -options.o: align.h -options.o: arith.h -options.o: botch_free.h -options.o: class.h -options.o: dataflow.h -options.o: idf.h -options.o: idfsize.h -options.o: macro.h -options.o: noRoption.h -options.o: nobitfield.h -options.o: nocross.h -options.o: nofloat.h -options.o: nopp.h -options.o: sizes.h -options.o: spec_arith.h -options.o: target_sizes.h -options.o: use_tmp.h -scan.o: class.h -scan.o: idf.h -scan.o: input.h -scan.o: interface.h -scan.o: lapbuf.h -scan.o: macro.h -scan.o: nopp.h -scan.o: nparams.h -skip.o: LLlex.h -skip.o: arith.h -skip.o: class.h -skip.o: file_info.h -skip.o: input.h -skip.o: interface.h -skip.o: nofloat.h -skip.o: nopp.h -skip.o: spec_arith.h -stack.o: Lpars.h -stack.o: arith.h -stack.o: botch_free.h -stack.o: debug.h -stack.o: def.h -stack.o: idf.h -stack.o: level.h -stack.o: mes.h -stack.o: noRoption.h -stack.o: nobitfield.h -stack.o: nofloat.h -stack.o: nopp.h -stack.o: spec_arith.h -stack.o: stack.h -stack.o: struct.h -stack.o: type.h -type.o: Lpars.h -type.o: align.h -type.o: arith.h -type.o: botch_free.h -type.o: def.h -type.o: idf.h -type.o: nobitfield.h -type.o: nocross.h -type.o: nofloat.h -type.o: nopp.h -type.o: sizes.h -type.o: spec_arith.h -type.o: target_sizes.h -type.o: type.h -ch7mon.o: Lpars.h -ch7mon.o: arith.h -ch7mon.o: botch_free.h -ch7mon.o: def.h -ch7mon.o: expr.h -ch7mon.o: idf.h -ch7mon.o: label.h -ch7mon.o: nobitfield.h -ch7mon.o: nofloat.h -ch7mon.o: nopp.h -ch7mon.o: spec_arith.h -ch7mon.o: type.h -label.o: Lpars.h -label.o: arith.h -label.o: def.h -label.o: idf.h -label.o: label.h -label.o: level.h -label.o: noRoption.h -label.o: nobitfield.h -label.o: nofloat.h -label.o: nopp.h -label.o: spec_arith.h -label.o: type.h -eval.o: Lpars.h -eval.o: align.h -eval.o: arith.h -eval.o: assert.h -eval.o: atw.h -eval.o: code.h -eval.o: dataflow.h -eval.o: debug.h -eval.o: def.h -eval.o: expr.h -eval.o: idf.h -eval.o: label.h -eval.o: level.h -eval.o: mes.h -eval.o: nobitfield.h -eval.o: nocross.h -eval.o: nofloat.h -eval.o: nopp.h -eval.o: sizes.h -eval.o: spec_arith.h -eval.o: specials.h -eval.o: stack.h -eval.o: target_sizes.h -eval.o: type.h -switch.o: Lpars.h -switch.o: arith.h -switch.o: assert.h -switch.o: botch_free.h -switch.o: code.h -switch.o: debug.h -switch.o: density.h -switch.o: expr.h -switch.o: idf.h -switch.o: label.h -switch.o: noRoption.h -switch.o: nobitfield.h -switch.o: nofloat.h -switch.o: nopp.h -switch.o: spec_arith.h -switch.o: switch.h -switch.o: type.h -conversion.o: Lpars.h -conversion.o: arith.h -conversion.o: nobitfield.h -conversion.o: nocross.h -conversion.o: nofloat.h -conversion.o: sizes.h -conversion.o: spec_arith.h -conversion.o: target_sizes.h -conversion.o: type.h -util.o: Lpars.h -util.o: align.h -util.o: def.h -util.o: nocross.h -util.o: nofloat.h -util.o: regcount.h -util.o: sizes.h -util.o: stack.h -util.o: target_sizes.h -util.o: use_tmp.h -util.o: util.h -blocks.o: Lpars.h -blocks.o: align.h -blocks.o: arith.h -blocks.o: atw.h -blocks.o: label.h -blocks.o: nocross.h -blocks.o: nofloat.h -blocks.o: sizes.h -blocks.o: spec_arith.h -blocks.o: stack.h -blocks.o: target_sizes.h -dataflow.o: dataflow.h -char.o: class.h -symbol2str.o: Lpars.h diff --git a/lang/cem/cemcom.ansi/Resolve b/lang/cem/cemcom.ansi/Resolve deleted file mode 100755 index acb50f49c..000000000 --- a/lang/cem/cemcom.ansi/Resolve +++ /dev/null @@ -1,67 +0,0 @@ -: create a directory Xsrc with name clashes resolved -: and run make in that directory -: '$Header$' - -case $# in -1) - ;; -*) echo "$0: one argument expected" 1>&2 - exit 1 - ;; -esac -PW=`pwd` -options= -case $1 in -main|emain|lnt) - target=$PW/$1 - ;; -omain) - target=$PW/$1 - options=-DPEEPHOLE - ;; -cemain) - target=$PW/$1 - options=-DCODE_EXPANDER - ;; -Xlint) - target=$1 - ;; -*) echo "$0: $1: Illegal argument" 1>&2 - exit 1 - ;; -esac -if test -d ../Xsrc -then - : -else mkdir ../Xsrc -fi -make EMHOME=$EMHOME longnames -: remove code generating routines from the clashes list as they are defines. -: code generating routine names start with C_ -sed '/^C_/d' < longnames > tmp$$ -cclash -c -l7 tmp$$ > ../Xsrc/Xclashes -rm -f tmp$$ -cd ../Xsrc -if cmp -s Xclashes clashes -then - : -else - mv Xclashes clashes -fi -rm -f Makefile -for i in `cat $PW/Cfiles` -do - cat >> Makefile < $i -EOF -done -make EMHOME=$EMHOME `cat $PW/Cfiles` -rm -f Makefile -ed - $PW/Makefile <<'EOF' -/^#EXCLEXCL/,/^#INCLINCL/d -w Makefile -q -EOF -make EMHOME=$EMHOME COPTIONS=$options MACH=$mach CURRDIR=$PW/ $target diff --git a/lang/cem/cemcom.ansi/Version.c b/lang/cem/cemcom.ansi/Version.c deleted file mode 100644 index c10d537ea..000000000 --- a/lang/cem/cemcom.ansi/Version.c +++ /dev/null @@ -1,8 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#ifndef lint -static char Version[] = "ACK CEM compiler Version 3.1"; -#endif lint diff --git a/lang/cem/cemcom.ansi/asm.c b/lang/cem/cemcom.ansi/asm.c deleted file mode 100644 index 4900ea909..000000000 --- a/lang/cem/cemcom.ansi/asm.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* A S M */ - -/*ARGSUSED*/ -code_asm(s, l) - char *s; - int l; -{ - /* 'asm' '(' string ')' ';' - */ - error("\"asm\" instruction not implemented"); -} diff --git a/lang/cem/cemcom.ansi/cem.1 b/lang/cem/cemcom.ansi/cem.1 deleted file mode 100644 index ea79f3aa6..000000000 --- a/lang/cem/cemcom.ansi/cem.1 +++ /dev/null @@ -1,230 +0,0 @@ -.TH CEM 1L 86/11/12 -.SH NAME -cem \- ACK C compiler -.SH SYNOPSIS -.B cem -[ option ] ... file ... -.SH DESCRIPTION -.I Cem -is a -.I cc (1)-like -C compiler that uses the C front-end compiler -.I cemcom (1) -of the Amsterdam Compiler Kit. -.I Cem -interprets its arguments not starting with a '\-' as -source files, to be compiled by the various parts of the compilation process, -which are listed below. -File arguments whose names end with \fB.\fP\fIcharacter\fP are interpreted as -follows: -.IP .[ao] -object file. -.IP .[ci] -C source code -.IP .e -EM assembler source file. -.IP .k -compact EM file, not yet optimized by the EM peephole optimizer. -.IP .m -compact EM file, already optimized by the peephole optimizer. -.IP .s -assembler file. -.LP -The actions to be taken by -.I cem -are directed by the type of file argument and the various options that are -presented to it. -.PP -The following set of options, which is a mixture of options interpreted by -.I cc (1) -and -.I ack (?) -are interpreted by -.I cem . -(The options not specified here are passed to the loader.) -.IP \fB\-B\fP\fIname\fP -Use -.I name -as front-end compiler instead of the default -.I cemcom (1). -.br -Same as "\fB\-Rcem=\fP\fIname\fP". -.IP \fB\-C\fP -Run C preprocessor -.I /lib/cpp -only and prevent it from eliding comments. -.IP \fB\-D\fP\fIname\fP\fB=\fP\fIdef\fP -Define the -.I name -to the preprocessor, as if by "#define". -.IP \fB\-D\fP\fIname\fP -.br -Same as "\fB\-D\fP\fIname\fP\fB=1\fP". -.IP \fB\-E\fP -Run only the macro preprocessor on the named files and send the -result to standard output. -.IP \fB\-I\fP\fIdir\fP -\&"#include" files whose names do not begin with '/' are always -sought first in the directory of the \fIfile\fP argument, then in directories -in \fB\-I\fP options, then in directories on a standard list (which in fact -consists of "/usr/include"). -.IP \fB\-L\fP\fIdir\fP -Use \fIdir\fP as library-containing directory instead of the default. -.IP \fB\-N\fP\fIc\fP -Only effective if ACK pipeline is used. -This option causes some default actions and options to be suppressed, according -to -.I c : -.RS -.IP \fBc\fP -do not convert from EM a.out to local a.out format (i.e., skip the -.B cv -pass.) -.IP \fBl\fP -do not pass the default loader flags to the -.B ld -pass. -.RE -.IP \fB\-P\fP -Same as \fB\-E\fP, but sending the result of input file \fIfile\fP\fB.[ceis]\fP -to \fIfile\fP\fB.i\fP. -.IP \fB\-R\fP -Passed to \fIcemcom\fP(1) in order to parse the named C programs according -to the C language as described in [K&R] (also called \fIRestricted\fP C). -.IP \fB\-R\fP\fIprog\fP\fB=\fP\fIname\fP -.br -Use \fIname\fP as program for phase \fIprog\fP of the compilation instead of -the default. -\&\fIProg\fP is one of the following names: -.RS -.IP \fBcpp\fP -macro preprocessor -.IP \fBcem\fP -front\-end compiler -.IP \fBopt\fP -EM peephole optimizer -.IP \fBdecode\fP -EM compact to EM assembler translator -.IP \fBencode\fP -EM assembler to EM compact translator -.IP \fBbe\fP -EM compact code to target\-machine assembly code compiler -.IP \fBcg\fP -same as \fBbe\fP -.IP \fBas\fP -assembler -.IP \fBld\fP -linker/loader -.IP \fBcv\fP -a.out format converting program (only if ACK pipeline is used) -.RE -.IP \fB\-R\fP\fIprog\fP\fB\-\fP\fIoption\fP -.br -Pass \fB\-\fP\fIoption\fP to the compilation phase indicated by \fIprog\fP. -.IP \fB\-S\fP -Same as \fB\-c.s\fP. -.IP \fB\-U\fP\fIname\fP -.br -Remove any initial definition of \fIname\fP. -.IP \fB\-V\fP\fIcm\fP.\fIn\fP,\ \fB\-V\fIcm\fP.\fIncm\fP.\fIn\fP\ ... -.br -Set the size and alignment requirements of the C constructs of the named -C input files. -The letter \fIc\fP indicates the simple type, which is one of -\fBs\fP(short), \fBi\fP(int), \fBl\fP(long), \fBf\fP(float), \fBd\fP(double) or -\fBp\fP(pointer). -The \fIm\fP parameter can be used to specify the length of the type (in bytes) -and the \fIn\fP parameter for the alignment of that type. -Absence of \fIm\fP or \fIn\fP causes the default value to be retained. -To specify that the bitfields should be right adjusted instead of the -default left adjustment, specify \fBr\fP as \fIc\fP parameter -without parameters. -.br -This option is passed directly to \fIcemcom\fP(1). -.IP \fB\-c\fP -Same as \fB\-c.o\fP. -.IP \fB\-c.e\fP -Produce human-readable EM assembly code on \fIfile\fP\fB.e\fP for the -named files \fIfile\fP\fB.[cikm]\fP -.IP \fB\-c.k\fP -Compile C source \fIfile\fP\fB.[ci]\fP or -encode human-readable EM assembly code from \fIfile\fP\fB.e\fP -into non-optimized compact EM code and write the result on \fIfile\fP\fB.k\fP -.IP \fB\-c.m\fP -Compile C source \fIfile\fP\fB.[ci]\fP, -translate non-optimized EM code from \fIfile\fP\fB.k\fP or -encode EM assembly code from \fIfile\fP\fB.e\fP -into optimized compact EM code and write the result on \fIfile\fP\fB.m\fP -.IP \fB\-c.o\fP -Suppress the loading phase of the compilation, and force an object file to -be produced even if only one program is compiled -.IP \fB\-c.s\fP -Compile the named \fIfile\fP\fB.[ceikm]\fP input files, and leave the -assembly language output on corresponding files suffixed ".s". -.IP \fB\-k\fP -Same as \fB\-c.k\fP. -.IP \fB\-l\fP\fIname\fP -.br -Append the library \fBlib\fP\fIname\fP\fB.a\fP to the list of files that -should be loaded and linked into the final output file. -The library is searched for in the library directory. -.IP \fB\-m\fP -Same as \fB\-c.m\fP. -.IP \fB\-o\fP\ \fIoutput\fP -.br -Name the final output file \fIoutput\fP. -If this option is used, the default "a.out" will be left undisturbed. -.IP \fB\-p\fP -Produce EM profiling code (\fBfil\fP and \fBlin\fP instructions to -enable an interpreter to keep track of the current location in the -source code) -.IP \fB\-t\fP -Keep the intermediate files, produced during the various phases of the -compilation. -The produced files are named \fIfile\fP\fB.\fP\fIcharacter\fP where -\&\fIcharacter\fP indicates the type of the file as listed before. -.IP \fB\-v\fP -Verbose. -Print the commands before they are executed. -.IP \fB\-vn\fP -Do not really execute (for debugging purposes only). -.IP \fB\-vd\fP -Print some additional information (for debugging purposes only). -.IP \fB\-\-\fP\fIanything\fP -.br -Equivalent to \fB\-Rcem\-\-\fP\fIanything\fP. -The options -.B \-\-C , -.B \-\-E -and -.B \-\-P -all have the same effect as respectively -.B \-C , -.B \-E -and -.B \-P -except for the fact that the macro preprocessor is taken to be the -built\-in preprocessor of the \fBcem\fP phase. -Most "\-\-" options are used by -.I cemcom (1) -to set some internal debug switches. -.LP -.SH SEE ALSO -cemcom(1), cc(1), ack(?), as(1), ld(1) -.br -.IP [K&R] -B.W. Kernighan and D.M. Ritchie, \fIThe C Programming Language\fP, -Prentice-Hall, 1978. -.SH DIAGNOSTICS -.I Cem -reports any failure of its components. -.SH BUGS -.IP \(bu -All intermediate files are placed in the current working directory which -causes files with the same name as the intermediate files to be overwritten. -.IP \(bu -.B Cem -only accepts a limited number of arguments to be passed to the components. -(e.g., 256). -.IP \(bu -Please report suggestions and other bugs to erikb@vu44.uucp diff --git a/lang/cem/cemcom.ansi/cem.c b/lang/cem/cemcom.ansi/cem.c deleted file mode 100644 index 220953018..000000000 --- a/lang/cem/cemcom.ansi/cem.c +++ /dev/null @@ -1,764 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* - Driver for the CEMCOM compiler: works like /bin/cc and accepts - most of the options accepted by /bin/cc and /usr/em/bin/ack. - Date written: dec 4, 1985 - Adapted for 68000 (Aug 19, 1986) - Merged the vax and mantra versions (Nov 10, 1986) - Author: Erik Baalbergen -*/ - -#include -#include -#include -#include -#include - -#define MAXARGC 256 /* maximum number of arguments allowed in a list */ -#define USTR_SIZE 1024 /* maximum length of string variable */ - -struct arglist { - int al_argc; - char *al_argv[MAXARGC]; -}; - -/* some system-dependent variables */ -char *PP = "/lib/cpp"; -char *CEM = "/usr/em/lib/em_cemcom"; -char *ENCODE = "/usr/em/lib/em_encode"; -char *DECODE = "/usr/em/lib/em_decode"; -char *OPT = "/usr/em/lib/em_opt"; -char *SHELL = "/bin/sh"; - -#ifndef MANTRA -char *CG = "/usr/em/lib/vax4/cg"; -char *AS = "/bin/as"; -char *AS_FIX = "/user1/erikb/bin/mcomm"; -char *LD = "/bin/ld"; -char *LIBDIR = "/user1/cem/lib"; -char *V_FLAG = "-Vs2.2w4.4i4.4l4.4f4.4d8.4p4.4"; -#else MANTRA -char *CG = "/usr/em/lib/m68k2/cg"; -char *AS = "/usr/em/lib/m68k2/as"; -char *LD = "/usr/em/lib/em_led"; -char *CV = "/usr/em/lib/m68k2/cv"; -char *LIBDIR = "/usr/em/lib/m68k2"; -char *V_FLAG = "-Vs2.2w2.2i2.2l4.2f4.2d8.2p4.2"; -#endif MANTRA - -struct arglist LD_HEAD = { - 2, - { -#ifndef MANTRA - "/usr/em/lib/vax4/head_em", - "/usr/em/lib/vax4/head_cc" -#else MANTRA - "/usr/em/lib/m68k2/head_em", - "/usr/em/lib/m68k2/head_cc" -#endif MANTRA - } -}; - -struct arglist LD_TAIL = { -#ifndef MANTRA - 4, - { - "/user1/cem/lib/libc.a", - "/user1/cem/lib/stb.o", - "/usr/em/lib/vax4/tail_mon", - "/usr/em/lib/vax4/tail_em" - } -#else MANTRA - 7, - { - "/usr/em/lib/m68k2/tail_cc.1s", - "/usr/em/lib/m68k2/tail_cc.2g", - "/usr/em/lib/m68k2/tail_cem", - "/usr/em/lib/m68k2/tail_fp.a", - "/usr/em/lib/m68k2/tail_em.rt", - "/usr/em/lib/m68k2/tail_mon", - "/usr/em/lib/m68k2/end_em" - } -#endif MANTRA -}; - -char *o_FILE = "a.out"; -#ifdef MANTRA -char *cv_FILE = "cv.out"; -#endif MANTRA - -#define remove(str) (((FLAG(t) == 0) && unlink(str)), (str)[0] = '\0') -#define cleanup(str) (str && remove(str)) -#define mkname(dst, s1, s2) mkstr(dst, (s1), (s2), 0) -#define init(al) (al)->al_argc = 1 -#define library(nm) \ - mkstr(alloc((unsigned int)strlen(nm) + strlen(LIBDIR) + 7), \ - LIBDIR, "/lib", nm, ".a", 0) - -struct arglist SRCFILES, LDFILES, GEN_LDFILES, PP_FLAGS, CEM_FLAGS, - OPT_FLAGS, DECODE_FLAGS, ENCODE_FLAGS, CG_FLAGS, AS_FLAGS, - O_FLAGS, DEBUG_FLAGS, CALL_VEC; - -#ifndef MANTRA -struct arglist LD_FLAGS; -#else MANTRA -struct arglist LD_FLAGS = { - 5, - { - "-b0:0x80000", - "-a0:2", - "-a1:2", - "-a2:2", - "-a3:2" - } -}; -struct arglist CV_FLAGS; -int Nc_flag = 0; -#endif MANTRA - -/* option naming */ -#define NAME(chr) chr -#define FLAG(chr) NAME(chr)_flag -int E_flag, P_flag, S_flag, c_flag, e_flag, k_flag, - m_flag, o_flag, t_flag, v_flag; - -/* various passes */ -struct prog { - char *p_name; - char **p_task; - struct arglist *p_flags; -} ProgParts[] = { - { "cpp", &PP, &PP_FLAGS }, - { "cem", &CEM, &CEM_FLAGS }, - { "opt", &OPT, &OPT_FLAGS }, - { "decode", &DECODE, &DECODE_FLAGS }, - { "encode", &ENCODE, &ENCODE_FLAGS }, - { "be", &CG, &CG_FLAGS }, - { "cg", &CG, &CG_FLAGS }, - { "as", &AS, &AS_FLAGS }, - { "ld", &LD, &LD_FLAGS }, -#ifdef MANTRA - { "cv", &CV, &CV_FLAGS }, -#endif MANTRA - { 0, 0, 0 } -}; - -/* various forward declarations */ -int trap(); -char *mkstr(); -char *alloc(); -long sizeof_file(); - -/* various globals */ -char *ProgCall = 0; -int debug = 0; -int exec = 1; -int RET_CODE = 0; - -main(argc, argv) - char *argv[]; -{ - char *str, **argvec, *file, *ldfile = 0; - int count, ext; - char Nfile[USTR_SIZE], kfile[USTR_SIZE], sfile[USTR_SIZE], - mfile[USTR_SIZE], ofile[USTR_SIZE], BASE[USTR_SIZE]; - register struct arglist *call = &CALL_VEC; - - set_traps(trap); - ProgCall = *argv++; - append(&CEM_FLAGS, "-L"); - while (--argc > 0) { - if (*(str = *argv++) != '-') { - append(&SRCFILES, str); - continue; - } - switch (str[1]) { - case '-': - switch (str[2]) { - case 'C': - case 'E': - case 'P': - FLAG(E) = 1; - append(&PP_FLAGS, str); - PP = CEM; - FLAG(P) = (str[2] == 'P'); - break; - default: - append(&DEBUG_FLAGS, str); - break; - } - break; - case 'B': - PP = CEM = &str[2]; - break; - case 'C': - case 'E': - case 'P': - FLAG(E) = 1; - append(&PP_FLAGS, str); - FLAG(P) = (str[1] == 'P'); - break; - case 'c': - if (str[2] == '.') { - switch (str[3]) { - case 's': - FLAG(S) = 1; - break; - case 'k': - FLAG(k) = 1; - break; - case 'o': - FLAG(c) = 1; - break; - case 'm': - FLAG(m) = 1; - break; - case 'e': - FLAG(e) = 1; - break; - default: - bad_option(str); - } - } - else - if (str[2] == '\0') - FLAG(c) = 1; - else - bad_option(str); - break; - case 'D': - case 'I': - case 'U': - append(&PP_FLAGS, str); - break; - case 'k': - FLAG(k) = 1; - break; - case 'l': - if (str[2] == '\0') /* no standard libraries */ - LD_HEAD.al_argc = LD_TAIL.al_argc = 0; - else /* use library from library directory */ - append(&SRCFILES, library(&str[2])); - break; - case 'L': /* change default library directory */ - LIBDIR = &str[2]; - break; - case 'm': - FLAG(m) = 1; - break; -#ifdef MANTRA - case 'N': - switch (str[2]) { - case 'c': /* no a.out conversion */ - Nc_flag = 1; - break; - case 'l': /* no default options to led */ - LD_FLAGS.al_argc = 0; - break; - default: - bad_option(str); - } - break; -#endif MANTRA - case 'o': - FLAG(o) = 1; - if (argc-- < 0) - bad_option(str); - else - o_FILE = *argv++; - break; - case 'O': - append(&O_FLAGS, "-O"); - break; - case 'R': - if (str[2] == '\0') - append(&CEM_FLAGS, str); - else - Roption(str); - break; - case 'S': - FLAG(S) = 1; - break; - case 't': - FLAG(t) = 1; - break; - case 'v': /* set debug switches */ - FLAG(v) = 1; - switch (str[2]) { - case 'd': - debug = 1; - break; - case 'n': /* no execute */ - exec = 0; - break; - case '\0': - break; - default: - bad_option(str); - } - break; - case 'V': - V_FLAG = str; - break; - default: - append(&LD_FLAGS, str); - } - } - if (debug) report("Note: debug output"); - if (exec == 0) - report("Note: no execution"); - count = SRCFILES.al_argc; - argvec = &(SRCFILES.al_argv[0]); - Nfile[0] = '\0'; - while (count-- > 0) { - basename(file = *argvec++, BASE); - if (FLAG(E)) { - char ifile[USTR_SIZE]; - - init(call); - append(call, PP); - concat(call, &DEBUG_FLAGS); - concat(call, &PP_FLAGS); - append(call, file); - runvec(call, FLAG(P) ? mkname(ifile, BASE, ".i") : 0); - continue; - } - ext = extension(file); - /* .c to .k and .N */ - if (ext == 'c' || ext == 'i') { - init(call); - append(call, CEM); - concat(call, &DEBUG_FLAGS); - append(call, V_FLAG); - concat(call, &CEM_FLAGS); - concat(call, &PP_FLAGS); - append(call, file); - append(call, mkname(kfile, BASE, ".k")); - append(call, mkname(Nfile, BASE, ".N")); - if (runvec(call, (char *)0)) { - file = kfile; - ext = 'k'; - if (sizeof_file(Nfile) <= 0L) - remove(Nfile); - } - else { - remove(kfile); - remove(Nfile); - continue; - } - } - /* .e to .k */ - if (ext == 'e') { - init(call); - append(call, ENCODE); - concat(call, &ENCODE_FLAGS); - append(call, file); - append(call, mkname(kfile, BASE, ".k")); - if (runvec(call, (char *)0) == 0) - continue; - file = kfile; - ext = 'k'; - } - if (FLAG(k)) - continue; - /* decode .k or .m */ - if (FLAG(e) && (ext == 'k' || ext == 'm')) { - char efile[USTR_SIZE]; - init(call); - append(call, DECODE); - concat(call, &DECODE_FLAGS); - append(call, file); - append(call, mkname(efile, BASE, ".e")); - runvec(call, (char *)0); - cleanup(kfile); - continue; - } - /* .k to .m */ - if (ext == 'k') { - init(call); - append(call, OPT); - concat(call, &OPT_FLAGS); - append(call, file); - if (runvec(call, mkname(mfile, BASE, ".m")) == 0) - continue; - file = mfile; - ext = 'm'; - cleanup(kfile); - } - if (FLAG(m)) - continue; - /* .m to .s */ - if (ext == 'm') { - init(call); - append(call, CG); - concat(call, &CG_FLAGS); - append(call, file); - append(call, mkname(sfile, BASE, ".s")); - if (runvec(call, (char *)0) == 0) - continue; - if (Nfile[0] != '\0') { -#ifndef MANTRA - init(call); - append(call, AS_FIX); - append(call, Nfile); - append(call, sfile); - runvec(call, (char *)0); -#endif MANTRA - remove(Nfile); - } - cleanup(mfile); - file = sfile; - ext = 's'; - } - if (FLAG(S)) - continue; - /* .s to .o */ - if (ext == 's') { - ldfile = FLAG(c) ? - ofile : - alloc((unsigned)strlen(BASE) + 3); - init(call); - append(call, AS); - concat(call, &AS_FLAGS); -#ifdef MANTRA - append(call, "-"); -#endif MANTRA - append(call, "-o"); - append(call, mkname(ldfile, BASE, ".o")); - append(call, file); - if (runvec(call, (char *)0) == 0) - continue; - file = ldfile; - ext = 'o'; - cleanup(sfile); - } - if (FLAG(c)) - continue; - append(&LDFILES, file); - if (ldfile) { - append(&GEN_LDFILES, ldfile); - ldfile = 0; - } - } - /* *.o to a.out */ - if (RET_CODE == 0 && LDFILES.al_argc > 0) { - init(call); - append(call, LD); - concat(call, &LD_FLAGS); - append(call, "-o"); -#ifndef MANTRA - append(call, o_FILE); -#else MANTRA - append(call, Nc_flag ? o_FILE : cv_FILE); -#endif MANTRA - concat(call, &LD_HEAD); - concat(call, &LDFILES); - concat(call, &LD_TAIL); - if (runvec(call, (char *)0)) { - register i = GEN_LDFILES.al_argc; - - while (i-- > 0) - remove(GEN_LDFILES.al_argv[i]); -#ifdef MANTRA - /* convert to local a.out format */ - if (Nc_flag == 0) { - init(call); - append(call, CV); - concat(call, &CV_FLAGS); - append(call, cv_FILE); - append(call, o_FILE); - if (runvec(call, (char *)0)) - remove(cv_FILE); - } -#endif MANTRA - } - } - exit(RET_CODE); -} - -#define BUFSIZE (USTR_SIZE * MAXARGC) -char alloc_buf[BUFSIZE]; - -char * -alloc(u) - unsigned u; -{ - static char *bufptr = &alloc_buf[0]; - register char *p = bufptr; - - if ((bufptr += u) >= &alloc_buf[BUFSIZE]) - panic("no space"); - return p; -} - -append(al, arg) - register struct arglist *al; - char *arg; -{ - if (al->al_argc >= MAXARGC) - panic("argument list overflow"); - al->al_argv[(al->al_argc)++] = arg; -} - -concat(al1, al2) - struct arglist *al1, *al2; -{ - register int i = al2->al_argc; - register char **p = &(al1->al_argv[al1->al_argc]); - register char **q = &(al2->al_argv[0]); - - if ((al1->al_argc += i) >= MAXARGC) - panic("argument list overflow"); - while (i-- > 0) - *p++ = *q++; -} - -/* The next function is a dirty old one, taking a variable number of - arguments. - Take care that the last argument is a null-valued pointer! -*/ -/*VARARGS1*/ -char * -mkstr(dst, arg) - char *dst, *arg; -{ - char **vec = (char **) &arg; - register char *p; - register char *q = dst; - - while (p = *vec++) { - while (*q++ = *p++); - q--; - } - return dst; -} - -Roption(str) - char *str; /* of the form "prog=/-arg" */ -{ - char *eq; - char *prog, *arg; - char bc; - char *cindex(); - - prog = &str[2]; - if (eq = cindex(prog, '=')) - bc = '='; - else - if (eq = cindex(prog, '-')) - bc = '-'; - else { - bad_option(str); - return; - } - *eq++ = '\0'; - if (arg = eq) { - char *opt = 0; - struct prog *pp = &ProgParts[0]; - - if (bc == '-') - opt = mkstr(alloc((unsigned)strlen(arg) + 2), - "-", arg, 0); - while (pp->p_name) { - if (strcmp(prog, pp->p_name) == 0) { - if (opt) - append(pp->p_flags, opt); - else - *(pp->p_task) = arg; - return; - } - pp++; - } - } - bad_option(str); -} - -basename(str, dst) - char *str; - register char *dst; -{ - register char *p1 = str; - register char *p2 = p1; - - while (*p1) - if (*p1++ == '/') - p2 = p1; - p1--; - if (*--p1 == '.') { - *p1 = '\0'; - while (*dst++ = *p2++) {} - *p1 = '.'; - } - else - while (*dst++ = *p2++) {} -} - -int -extension(fn) - register char *fn; -{ - char c; - - while (*fn++) {} - fn--; - c = *--fn; - return (*--fn == '.') ? c : 0; -} - -long -sizeof_file(nm) - char *nm; -{ - struct stat stbuf; - - if (stat(nm, &stbuf) == 0) - return stbuf.st_size; - return -1; -} - -char * sysmsg[] = { - 0, - "Hangup", - "Interrupt", - "Quit", - "Illegal instruction", - "Trace/BPT trap", - "IOT trap", - "EMT trap", - "Floating exception", - "Killed", - "Bus error", - "Memory fault", - "Bad system call", - "Broken pipe", - "Alarm call", - "Terminated", - "Signal 16" -}; - -runvec(vec, outp) - struct arglist *vec; - char *outp; -{ - int status, fd; - char *task = vec->al_argv[1]; - - vec->al_argv[vec->al_argc] = 0; - if (FLAG(v)) - print_vec(vec); - if (exec == 0) - return 1; - if (fork() == 0) { /* start up the process */ - extern int errno; - if (outp) { /* redirect standard output */ - close(1); - if ((fd = creat(outp, 0666)) < 0) - panic("cannot create %s", outp); - if (fd != 1) - panic("illegal redirection"); - } - if (debug) report("exec %s", task); - execv(task, &(vec->al_argv[1])); - /* not an a.out file, let's try it with the SHELL */ - if (debug) report("try it with %s", SHELL); - if (errno == ENOEXEC) { - vec->al_argv[0] = SHELL; - execv(SHELL, &(vec->al_argv[0])); - } - /* failed, so ... */ - panic("cannot execute %s", task); - exit(1); - } - else { - int loworder, highorder, sig; - - wait(&status); - loworder = status & 0377; - highorder = (status >> 8) & 0377; - if (loworder == 0) { - if (highorder) - report("%s: exit status %d", task, highorder); - return highorder ? ((RET_CODE = 1), 0) : 1; - } - else { - sig = loworder & 0177; - if (sig == 0177) - report("%s: stopped by ptrace", task); - else - if (sysmsg[sig]) - report("%s: %s%s", task, sysmsg[sig], - (loworder & 0200) - ? " - core dumped" - : ""); - RET_CODE = 1; - return 0; - } - } - /*NOTREACHED*/ -} - -bad_option(str) - char *str; -{ - report("bad option %s", str); -} - -/*VARARGS1*/ -report(fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) - char *fmt; -{ - fprintf(stderr, "%s: ", ProgCall); - fprintf(stderr, fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); - fprintf(stderr, "\n"); -} - -/*VARARGS1*/ -panic(fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) - char *fmt; -{ - fprintf(stderr, "%s: ", ProgCall); - fprintf(stderr, fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); - fprintf(stderr, "\n"); - exit(1); -} - -set_traps(f) - int (*f)(); -{ - signal(SIGHUP, f); - signal(SIGINT, f); - signal(SIGQUIT, f); - signal(SIGALRM, f); - signal(SIGTERM, f); -} - -/*ARGSUSED*/ -trap(sig) -{ - set_traps(SIG_IGN); - panic("Trapped"); -} - -print_vec(vec) - struct arglist *vec; -{ - register i; - - for (i = 1; i < vec->al_argc; i++) - printf("%s ", vec->al_argv[i]); - printf("\n"); -} - -char * -cindex(s, c) - char *s, c; -{ - while (*s) - if (*s++ == c) - return s - 1; - return (char *) 0; -} diff --git a/lang/cem/cemcom.ansi/cemcom.1 b/lang/cem/cemcom.ansi/cemcom.1 deleted file mode 100644 index 0d2b8225e..000000000 --- a/lang/cem/cemcom.ansi/cemcom.1 +++ /dev/null @@ -1,104 +0,0 @@ -.TH EM_CEMCOM 6ACK -.ad -.SH NAME -em_cemcom \- C to EM compiler -.SH SYNOPSIS -\fB~/em/lib/em_cemcom\fP [\fIoptions\fP] \fIsource \fP[\fIdestination \fP[\fInamelist\fP]] -.SH DESCRIPTION -\fICemcom\fP is a compiler that translates C programs -into EM compact code. -The input is taken from \fIsource\fP, while the -EM code is written on \fIdestination\fP. -If either of these two names is "\fB-\fP", standard input or output respectively -is taken. -The file \fInamelist\fP, if supplied, will contain a list of the names -of external, so-called \fBcommon\fP, variables. -When the preprocessor is invoked to run stand-alone, \fIdestination\fP -needs not be specified. -.br -\fIOptions\fP is a, possibly empty, sequence of the following combinations: -.IP \fB\-D\fIname\fR=\fItext\fR -.br -define \fIname\fR as a macro with \fItext\fR as its replacement text. -.IP \fB\-D\fIname\fR -.br -the same as \fB\-D\fIname\fR=1. -.IP \fB\-I\fIdirname\fR -.br -insert \fIdirname\fR in the list of include directories. -.IP \fB\-M\fP\fIn\fP -set maximum identifier length to \fIn\fP. -.IP \fB\-g\fP -produce a DBX-style symbol table. -.IP \fB\-n\fR -do not generate EM register messages. -The user-declared variables are not stored into registers on the target -machine. -.IP \fB\-L\fR -don't generate the EM \fBfil\fR and \fBlin\fR instructions -that usually are generated to enable -an interpreter to keep track of the current location in the source code. -.IP \fB\-p\fR -generate code at each procedure entry to call the routine -.BR procentry , -and at each return to call the routine -.BE procexit . -These routines are supplied with one parameter, a pointer to a -string containing the name of the procedure. -.IP \fB\-A\fR[\fIfile\fR] -.br -if \fIfile\fR is not given, generate a list -of makefile dependencies and write them to the standard output. -If \fIfile\fP is given, -generate the list of makefile dependencies on file \fIfile\fP. -.IP \fB-i\fR -when generating makefile dependencies, do not include files from -/usr/include. -.IP \fB-m\fR -when generating makefile dependencies, generate them in the following format: -.RS -.IP "file.o: file1.h" -.RE -.IP "" -where "file.o" is derived from the source file name. Normally, only a list -of files included is generated. -.IP \fB\-R\fR -interpret the input as restricted C (according to the language as -described in \fIThe C programming language\fR by Kernighan and Ritchie.) -.IP \fB\-U\fIname\fR -.br -get rid of the compiler-predefined macro \fIname\fR. -.IP \fB\-V\fIcm\fR.\fIn\fR,\ \fB\-V\fIcm\fR.\fIncm\fR.\fIn\fR\ ... -.br -set the size and alignment requirements. -The letter \fIc\fR indicates the simple type, which is one of -\fBs\fR(short), \fBi\fR(int), \fBl\fR(long), \fBf\fR(float), \fBd\fR(double) or -\fBp\fR(pointer). -The \fIm\fR parameter can be used to specify the length of the type (in bytes) -and the \fIn\fR parameter for the alignment of that type. -Absence of \fIm\fR or \fIn\fR causes the default value to be retained. -To specify that the bitfields should be right adjusted instead of the -default left adjustment, specify \fBr\fR as \fIc\fR parameter. -.IP \fB\-w\fR -suppress warning messages. -.IP \fB\-s\fR -suppress stricts. -.IP \fB\-a\fR -suppress warnings and stricts. -.IP \fB\-o\fR -suppress warnings and stricts about old-style. -.IP \fB\-\-\fItext\fR -.br -where \fItext\fR can be either of the above or -a debug flag of the compiler (which is not useful for the common user.) -This feature can be used in various shell scripts and surrounding programs -to force a certain option to be handed over to \fBcemcom\fR. -.LP -.SH FILES -.IR ~em/lib/em_cemcom : -the compiler -.SH DIAGNOSTICS -All warning and error messages are written on standard error output. -.SH REFERENCE -Baalbergen, E.H., D. Grune, M. Waage ;"\fIThe CEM compiler\fR", -Informatica Manual IM-4 diff --git a/lang/cem/cemcom.ansi/ch7.c b/lang/cem/cemcom.ansi/ch7.c deleted file mode 100644 index 022521b86..000000000 --- a/lang/cem/cemcom.ansi/ch7.c +++ /dev/null @@ -1,641 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* S E M A N T I C A N A L Y S I S -- C H A P T E R 3.3 */ - -#include "lint.h" -#include "debug.h" -#include "nobitfield.h" -#include "idf.h" -#include -#include "arith.h" -#include "proto.h" -#include "type.h" -#include "struct.h" -#include "label.h" -#include "expr.h" -#include "def.h" -#include "Lpars.h" -#include "assert.h" -#include "file_info.h" - -extern char options[]; -extern char *symbol2str(); -extern struct type *qualifier_type(); - -/* Most expression-handling routines have a pointer to a - (struct type *) as first parameter. The object under the pointer - gets updated in the process. -*/ - -ch7sel(expp, oper, idf) - struct expr **expp; - struct idf *idf; -{ - /* The selector idf is applied to *expp; oper may be '.' or - ARROW. - */ - register struct expr *exp; - register struct type *tp; - register struct sdef *sd; - - any2opnd(expp, oper); - exp = *expp; - tp = exp->ex_type; - if (oper == ARROW) { - if (tp->tp_fund == POINTER && - ( tp->tp_up->tp_fund == STRUCT || - tp->tp_up->tp_fund == UNION)) /* normal case */ - tp = tp->tp_up; - else { /* constructions like "12->selector" and - "char c; c->selector" - */ - switch (tp->tp_fund) { - case POINTER: - break; - case INT: - case LONG: - /* An error is given in idf2sdef() */ - ch7cast(expp, CAST, pa_type); - sd = idf2sdef(idf, tp); - tp = sd->sd_stype; - break; - default: - expr_error(exp, "-> applied to %s", - symbol2str(tp->tp_fund)); - case ERRONEOUS: - exp->ex_type = error_type; - return; - } - } - } else { /* oper == '.' */ - /* nothing */ - } - exp = *expp; - switch (tp->tp_fund) { - case POINTER: /* for int *p; p->next = ... */ - case STRUCT: - case UNION: - break; - case INT: - case LONG: - /* warning will be given by idf2sdef() */ - break; - default: - if (!is_anon_idf(idf)) - expr_error(exp, "selector %s applied to %s", - idf->id_text, symbol2str(tp->tp_fund)); - case ERRONEOUS: - exp->ex_type = error_type; - return; - } - sd = idf2sdef(idf, tp); - if (oper == '.') { - /* there are 3 cases in which the selection can be - performed compile-time: - I: n.sel (n either an identifier or a constant) - II: (e.s1).s2 (transformed into (e.(s1+s2))) - III: (e->s1).s2 (transformed into (e->(s1+s2))) - The code performing these conversions is - extremely obscure. - */ - if (exp->ex_class == Value) { - /* It is an object we know the address of; so - we can calculate the address of the - selected member - */ - exp->VL_VALUE += sd->sd_offset; - exp->ex_type = sd->sd_type; - exp->ex_lvalue = exp->ex_type->tp_fund != ARRAY; - if (exp->ex_type == error_type) { - exp->ex_flags |= EX_ERROR; - } - } - else - if (exp->ex_class == Oper) { - struct oper *op = &(exp->ex_object.ex_oper); - - if (op->op_oper == '.' || op->op_oper == ARROW) { - ASSERT(is_cp_cst(op->op_right)); - op->op_right->VL_VALUE += sd->sd_offset; - exp->ex_type = sd->sd_type; - exp->ex_lvalue = exp->ex_type->tp_fund != ARRAY; - if (exp->ex_type == error_type) { - exp->ex_flags |= EX_ERROR; - } - } - else { - exp = new_oper(sd->sd_type, exp, '.', - intexpr(sd->sd_offset, INT)); - exp->ex_lvalue = sd->sd_type->tp_fund != ARRAY; - if (!exp->OP_LEFT->ex_lvalue) - exp->ex_flags |= EX_ILVALUE; - } - } - } - else { /* oper == ARROW */ - exp = new_oper(sd->sd_type, - exp, oper, intexpr(sd->sd_offset, INT)); - exp->ex_lvalue = (sd->sd_type->tp_fund != ARRAY); - exp->ex_flags &= ~EX_ILVALUE; - } - if (sd->sd_type->tp_typequal & TQ_CONST) - exp->ex_flags |= EX_READONLY; - if (sd->sd_type->tp_typequal & TQ_VOLATILE) - exp->ex_flags |= EX_VOLATILE; - if (oper == '.' && exp->ex_flags & EX_READONLY) { - exp->ex_type = qualifier_type(exp->ex_type, TQ_CONST); - } - *expp = exp; -} - -ch7incr(expp, oper) - struct expr **expp; -{ - /* The monadic prefix/postfix incr/decr operator oper is - applied to *expp. - */ - ch7asgn(expp, oper, intexpr((arith)1, INT)); -} - -ch7cast(expp, oper, tp) - register struct expr **expp; - register struct type *tp; -{ - /* The expression *expp is cast to type tp; the cast is - caused by the operator oper. If the cast has - to be passed on to run time, its left operand will be an - expression of class Type. - */ - register struct type *oldtp; - - if ((*expp)->ex_type->tp_fund == FUNCTION) - function2pointer(*expp); - if ((*expp)->ex_type->tp_fund == ARRAY) - array2pointer(*expp); - if ((*expp)->ex_class == String) - string2pointer(*expp); - oldtp = (*expp)->ex_type; - -#ifndef NOBITFIELD - if (oldtp->tp_fund == FIELD) { - field2arith(expp); - ch7cast(expp, oper, tp); - } - else - if (tp->tp_fund == FIELD) { - ch7cast(expp, oper, tp->tp_up); - } - else -#endif NOBITFIELD - if (equal_type(tp, oldtp)) { - /* life is easy */ - } - else - if (tp->tp_fund == VOID) { - /* easy again */ - (*expp)->ex_type = void_type; - } - else - if (is_arith_type(oldtp) && is_arith_type(tp)) { - int oldi = is_integral_type(oldtp); - int i = is_integral_type(tp); - - if (oldi && i) { -#ifdef LINT - if (oper == CAST) - (*expp)->ex_type = tp; - else - int2int(expp, tp); -#else LINT - int2int(expp, tp); -#endif LINT - } - else - if (oldi && !i) { -#ifdef LINT - if (oper == CAST) - (*expp)->ex_type = tp; - else - int2float(expp, tp); -#else LINT - int2float(expp, tp); -#endif LINT - } - else - if (!oldi && i) { -#ifdef LINT - if (oper == CAST) - (*expp)->ex_type = tp; - else - float2int(expp, tp); -#else LINT - float2int(expp, tp); -#endif LINT - } - else { - /* !oldi && !i */ -#ifdef LINT - if (oper == CAST) - (*expp)->ex_type = tp; - else - float2float(expp, tp); -#else LINT - float2float(expp, tp); -#endif LINT - } - } - else - if (oldtp->tp_fund == POINTER && tp->tp_fund == POINTER) { - if (oper == CASTAB) - expr_warning(*expp, "incompatible pointers"); - else - if (oper != CAST) - expr_warning(*expp, "incompatible pointers in %s", - symbol2str(oper)); -#ifdef LINT - if (oper != CAST) - lint_ptr_conv(oldtp->tp_up->tp_fund, tp->tp_up->tp_fund); -#endif LINT - (*expp)->ex_type = tp; /* free conversion */ - } - else - if (oldtp->tp_fund == POINTER && is_integral_type(tp)) { - /* from pointer to integral */ - if (oper != CAST) - expr_warning(*expp, - "illegal conversion of pointer to %s", - symbol2str(tp->tp_fund)); - if (oldtp->tp_size > tp->tp_size) - expr_warning(*expp, - "conversion of pointer to %s loses accuracy", - symbol2str(tp->tp_fund)); - if (oldtp->tp_size != tp->tp_size) - int2int(expp, tp); - else - (*expp)->ex_type = tp; - } - else - if (tp->tp_fund == POINTER && is_integral_type(oldtp)) { - /* from integral to pointer */ - switch (oper) { - case CAST: - break; - case CASTAB: - case EQUAL: - case NOTEQUAL: - case '=': - case RETURN: - if (is_cp_cst(*expp) && (*expp)->VL_VALUE == (arith)0) - break; - default: - expr_warning(*expp, - "illegal conversion of %s to pointer", - symbol2str(oldtp->tp_fund)); - break; - } - if (oldtp->tp_size > tp->tp_size) - expr_warning(*expp, - "conversion of %s to pointer loses accuracy", - symbol2str(oldtp->tp_fund)); - if (oldtp->tp_size != tp->tp_size) - int2int(expp, tp); - else - (*expp)->ex_type = tp; - } - else - if (oldtp->tp_fund == ERRONEOUS) { - /* we just won't look */ - (*expp)->ex_type = tp; /* brute force */ - } - else - if (oldtp->tp_size == tp->tp_size && oper == CAST) { - expr_warning(*expp, "dubious conversion based on equal size"); - (*expp)->ex_type = tp; /* brute force */ - } - else { - if (oldtp->tp_fund != ERRONEOUS && tp->tp_fund != ERRONEOUS) - expr_error(*expp, "cannot convert %s to %s", - symbol2str(oldtp->tp_fund), - symbol2str(tp->tp_fund) - ); - (*expp)->ex_type = tp; /* brute force */ - } - if (oper == CAST) { - (*expp)->ex_flags |= EX_ILVALUE; - } -} - -/* Determine whether two types are equal. -*/ -equal_type(tp, otp) - register struct type *tp, *otp; -{ - if (tp == otp) - return 1; - if (!tp || !otp) - return 0; - - if (tp->tp_fund != otp->tp_fund) - return 0; - if (tp->tp_unsigned != otp->tp_unsigned) - return 0; - if (tp->tp_align != otp->tp_align) - return 0; - if (tp->tp_fund != ARRAY /* && tp->tp_fund != STRUCT */ ) { /* UNION ??? */ - if (tp->tp_size != otp->tp_size) - return 0; - } - - switch (tp->tp_fund) { - - case FUNCTION: - /* If both types have parameter type lists, the type of - each parameter in the composite parameter type list - is the composite type of the corresponding paramaters. - */ - if (tp->tp_proto && otp->tp_proto) { - if (!equal_proto(tp->tp_proto, otp->tp_proto)) - return 0; - } else if (tp->tp_proto || otp->tp_proto) { - if (!legal_mixture(tp, otp)) - return 0; - } - return equal_type(tp->tp_up, otp->tp_up); - - case ARRAY: - /* If one type is an array of known size, the composite - type is an array of that size - */ - if (tp->tp_size != otp->tp_size && - (tp->tp_size != -1 && otp->tp_size != -1)) - return 0; - return equal_type(tp->tp_up, otp->tp_up); - - case POINTER: - if (equal_type(tp->tp_up, otp->tp_up)) { - if (otp->tp_up->tp_typequal & TQ_CONST) { - if (!(tp->tp_up->tp_typequal & TQ_CONST)) { - strict("illegal use of pointer to const object"); - } - } - return 1; - } - else return 0; - - case FIELD: - return equal_type(tp->tp_up, otp->tp_up); - - case STRUCT: - case UNION: - case ENUM: - return tp->tp_idf == otp->tp_idf && tp->tp_sdef == otp->tp_sdef; - - default: - return 1; - } -} - -check_pseudoproto(pl, opl) - register struct proto *pl, *opl; -{ - int retval = 1; - - if (pl->pl_flag & PL_ELLIPSIS) { - error("illegal ellipsis terminator"); - return 2; - } - while (pl && opl) { - if (!equal_type(pl->pl_type, opl->pl_type)) { - if (!(pl->pl_flag & PL_ERRGIVEN) - && !(opl->pl_flag & PL_ERRGIVEN)) - error("incorrect type for parameter %s of definition", - opl->pl_idf->id_text); - pl->pl_flag |= PL_ERRGIVEN; - opl->pl_flag |= PL_ERRGIVEN; - retval = 2; - } - pl = pl->next; - opl = opl->next; - } - if (pl || opl) { - error("incorrect number of parameters"); - retval = 2; - } - return retval; -} - -legal_mixture(tp, otp) - struct type *tp, *otp; -{ - register struct proto *pl = tp->tp_proto, *opl = otp->tp_proto; - int retval = 1; - struct proto *prot; - int fund; - - ASSERT( (pl != 0) ^ (opl != 0)); - if (pl) { - prot = pl; - } else { - prot = opl; - } - if (!opl && otp->tp_pseudoproto) { - return check_pseudoproto(tp->tp_proto, otp->tp_pseudoproto); - } - - if (prot->pl_flag & PL_ELLIPSIS) { - if (!(prot->pl_flag & PL_ERRGIVEN)) { - if (pl) - error("illegal ellipsis terminator"); - else error("ellipsis terminator in previous (prototype) declaration"); - } - prot->pl_flag |= PL_ERRGIVEN; - prot = prot->next; - return 2; - } - while (prot) { - /* if (!(prot->pl_flag & PL_ELLIPSIS)) {} */ - fund = prot->pl_type->tp_fund; - if (fund == CHAR || fund == SHORT || fund == FLOAT) { - if (!(prot->pl_flag & PL_ERRGIVEN)) - error("illegal %s parameter in %sdeclaration", - symbol2str(fund), (opl ? "previous (prototype) " : "" )); - prot->pl_flag |= PL_ERRGIVEN; - retval = 2; - } - prot = prot->next; - } - return retval; -} - -equal_proto(pl, opl) - register struct proto *pl, *opl; -{ - if (pl == opl) - return 1; - - /* If only one type is a function type with a parameter type list - (a function prototype), the composite type is a function - prototype with parameter type list. - */ - while ( pl && opl) { - - if ((pl->pl_flag & ~PL_ERRGIVEN) != (opl->pl_flag & ~PL_ERRGIVEN)) - return 0; - - if (!equal_type(pl->pl_type, opl->pl_type)) - return 0; - - pl = pl->next; - opl = opl->next; - } - return !(pl || opl); -} - -recurconst(tp) -struct type *tp; -{ - register struct sdef *sdf; - - ASSERT(tp); - if (!tp) return 0; - if (tp->tp_typequal & TQ_CONST) return 1; - sdf = tp->tp_sdef; - while (sdf) { - if (recurconst(sdf->sd_type)) - return 1; - sdf = sdf->sd_sdef; - } - return 0; -} - -ch7asgn(expp, oper, expr) - struct expr **expp; - struct expr *expr; -{ - /* The assignment operators. - "f op= e" should be interpreted as - "f = (typeof f)((typeof (f op e))f op (typeof (f op e))e)" - and not as "f = f op (typeof f)e". - Consider, for example, (i == 10) i *= 0.9; (i == 9), where - typeof i == int. - The resulting expression tree becomes: - op= - / \ - / \ - f (typeof (f op e))e - EVAL should however take care of evaluating (typeof (f op e))f - */ - register struct expr *exp = *expp; - int fund = exp->ex_type->tp_fund; - int vol = 0; - struct type *tp; - - /* We expect an lvalue */ - if (!exp->ex_lvalue) { - expr_error(exp, "no lvalue in operand of %s", symbol2str(oper)); - } else if (exp->ex_flags & EX_ILVALUE) { - strict("incorrect lvalue in operand of %s", symbol2str(oper)); - } else if (exp->ex_flags & EX_READONLY) { - expr_error(exp, "operand of %s is read-only", symbol2str(oper)); - } else if (fund == STRUCT || fund == UNION) { - if (recurconst(exp->ex_type)) - expr_error(expr,"operand of %s contains a const-qualified member", - symbol2str(oper)); - } - - /* Preserve volatile markers across the tree. - This is questionable, depending on the way the optimizer - wants this information. - vol = (exp->ex_flags & EX_VOLATILE) || (expr->ex_flags & EX_VOLATILE); - */ - - if (oper == '=') { - ch7cast(&expr, oper, exp->ex_type); - tp = expr->ex_type; - } - else { /* turn e into e' where typeof(e') = typeof (f op e) */ - struct expr *extmp = intexpr((arith)0, INT); - - /* this is really $#@&*%$# ! */ - /* if you correct this, please correct lint_new_oper() too */ - extmp->ex_lvalue = 1; - extmp->ex_type = exp->ex_type; - ch7bin(&extmp, oper, expr); - /* Note that ch7bin creates a tree of the expression - ((typeof (f op e))f op (typeof (f op e))e), - where f ~ extmp and e ~ expr. - We want to use (typeof (f op e))e. - Ch7bin does not create a tree if both operands - were illegal or constants! - */ - tp = extmp->ex_type; /* perform the arithmetic in type tp */ - if (extmp->ex_class == Oper) { - expr = extmp->OP_RIGHT; - extmp->OP_RIGHT = NILEXPR; - free_expression(extmp); - } - else - expr = extmp; - } -#ifndef NOBITFIELD - if (fund == FIELD) - exp = new_oper(exp->ex_type->tp_up, exp, oper, expr); - else - exp = new_oper(exp->ex_type, exp, oper, expr); -#else NOBITFIELD - exp = new_oper(exp->ex_type, exp, oper, expr); -#endif NOBITFIELD - exp->OP_TYPE = tp; /* for EVAL() */ - exp->ex_flags |= vol ? (EX_SIDEEFFECTS|EX_VOLATILE) : EX_SIDEEFFECTS; - *expp = exp; -} - -/* Some interesting (?) questions answered. -*/ -int -is_integral_type(tp) - register struct type *tp; -{ - switch (tp->tp_fund) { - case GENERIC: - case CHAR: - case SHORT: - case INT: - case LONG: - case ENUM: - return 1; -#ifndef NOBITFIELD - case FIELD: - return is_integral_type(tp->tp_up); -#endif NOBITFIELD - default: - return 0; - } -} - -int -is_arith_type(tp) - register struct type *tp; -{ - switch (tp->tp_fund) { - case GENERIC: - case CHAR: - case SHORT: - case INT: - case LONG: - case ENUM: - case FLOAT: - case DOUBLE: - case LNGDBL: - return 1; -#ifndef NOBITFIELD - case FIELD: - return is_arith_type(tp->tp_up); -#endif NOBITFIELD - default: - return 0; - } -} diff --git a/lang/cem/cemcom.ansi/ch7bin.c b/lang/cem/cemcom.ansi/ch7bin.c deleted file mode 100644 index 66d3ff6fc..000000000 --- a/lang/cem/cemcom.ansi/ch7bin.c +++ /dev/null @@ -1,352 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* SEMANTIC ANALYSIS (CHAPTER 3.3) -- BINARY OPERATORS */ - -#include "botch_free.h" -#include -#include "lint.h" -#include "idf.h" -#include -#include "arith.h" -#include "type.h" -#include "struct.h" -#include "label.h" -#include "expr.h" -#include "Lpars.h" - -extern char options[]; -extern char *symbol2str(); - -/* This chapter asks for the repeated application of code to handle - an operation that may be executed at compile time or at run time, - depending on the constancy of the operands. -*/ - -#define commutative_binop(expp, oper, expr) mk_binop(expp, oper, expr, 1) -#define non_commutative_binop(expp, oper, expr) mk_binop(expp, oper, expr, 0) - -ch7bin(expp, oper, expr) - register struct expr **expp; - struct expr *expr; -{ - /* apply binary operator oper between *expp and expr. - NB: don't swap operands if op is one of the op= operators!!! - */ - - any2opnd(expp, oper); - any2opnd(&expr, oper); - switch (oper) { - case '[': /* 3.3.2.1 */ - /* indexing follows the commutative laws */ - switch ((*expp)->ex_type->tp_fund) { - case POINTER: - case ARRAY: - break; - case ERRONEOUS: - return; - default: /* unindexable */ - switch (expr->ex_type->tp_fund) { - case POINTER: - case ARRAY: - break; - case ERRONEOUS: - return; - default: - expr_error(*expp, - "indexing an object of type %s", - symbol2str((*expp)->ex_type->tp_fund)); - return; - } - break; - } - ch7bin(expp, '+', expr); - ch7mon('*', expp); - break; - - case '(': /* 3.3.2.2 */ - if ( (*expp)->ex_type->tp_fund == POINTER && - (*expp)->ex_type->tp_up->tp_fund == FUNCTION - ) { - ch7mon('*', expp); - } - if ((*expp)->ex_type->tp_fund != FUNCTION) { - expr_error(*expp, "call of non-function (%s)", - symbol2str((*expp)->ex_type->tp_fund)); - /* leave the expression; it may still serve */ - free_expression(expr); /* there go the parameters */ - *expp = new_oper(error_type, - *expp, '(', (struct expr *)0); - } - else - *expp = new_oper((*expp)->ex_type->tp_up, - *expp, '(', expr); - (*expp)->ex_flags |= EX_SIDEEFFECTS; - break; - - case PARCOMMA: /* 3.3.2.2 */ - if ((*expp)->ex_type->tp_fund == FUNCTION) - function2pointer(*expp); - *expp = new_oper(expr->ex_type, *expp, PARCOMMA, expr); - break; - - case '%': - case MODAB: - case ANDAB: - case XORAB: - case ORAB: - opnd2integral(expp, oper); - opnd2integral(&expr, oper); - /* fallthrough */ - case '/': - case DIVAB: - case TIMESAB: - arithbalance(expp, oper, &expr); - non_commutative_binop(expp, oper, expr); - break; - - case '&': - case '^': - case '|': - opnd2integral(expp, oper); - opnd2integral(&expr, oper); - /* fallthrough */ - case '*': - arithbalance(expp, oper, &expr); - commutative_binop(expp, oper, expr); - break; - - case '+': - if (expr->ex_type->tp_fund == POINTER) { /* swap operands */ - struct expr *etmp = expr; - expr = *expp; - *expp = etmp; - } - /* fallthrough */ - case PLUSAB: - case POSTINCR: - case PLUSPLUS: - if ((*expp)->ex_type->tp_fund == POINTER) { - pointer_arithmetic(expp, oper, &expr); - if (expr->ex_type->tp_size != (*expp)->ex_type->tp_size) - ch7cast(&expr, CAST, (*expp)->ex_type); - pointer_binary(expp, oper, expr); - } - else { - arithbalance(expp, oper, &expr); - if (oper == '+') - commutative_binop(expp, oper, expr); - else - non_commutative_binop(expp, oper, expr); - } - break; - - case '-': - case MINAB: - case POSTDECR: - case MINMIN: - if ((*expp)->ex_type->tp_fund == POINTER) { - if (expr->ex_type->tp_fund == POINTER) - pntminuspnt(expp, oper, expr); - else { - pointer_arithmetic(expp, oper, &expr); - pointer_binary(expp, oper, expr); - } - } - else { - arithbalance(expp, oper, &expr); - non_commutative_binop(expp, oper, expr); - } - break; - - case LEFT: - case RIGHT: - case LEFTAB: - case RIGHTAB: - opnd2integral(expp, oper); - opnd2integral(&expr, oper); - arithbalance(expp, oper, &expr); /* ch. 7.5 */ - ch7cast(&expr, oper, int_type); /* cvt. rightop to int */ - non_commutative_binop(expp, oper, expr); - break; - - case '<': - case '>': - case LESSEQ: - case GREATEREQ: - case EQUAL: - case NOTEQUAL: - relbalance(expp, oper, &expr); - non_commutative_binop(expp, oper, expr); - (*expp)->ex_type = int_type; - break; - - case AND: - case OR: - opnd2test(expp, oper); - opnd2test(&expr, oper); - if (is_cp_cst(*expp)) { - register struct expr *ex = *expp; - - /* the following condition is a short-hand for - ((oper == AND) && o1) || ((oper == OR) && !o1) - where o1 == (*expp)->VL_VALUE; - and ((oper == AND) || (oper == OR)) - */ - if ((oper == AND) == (ex->VL_VALUE != (arith)0)) - *expp = expr; - else { - ex->ex_flags |= expr->ex_flags; - free_expression(expr); - *expp = intexpr((arith)((oper == AND) ? 0 : 1), - INT); - } - (*expp)->ex_flags |= ex->ex_flags; - free_expression(ex); - } - else - if (is_cp_cst(expr)) { - /* Note!!!: the following condition is a short-hand for - ((oper == AND) && o2) || ((oper == OR) && !o2) - where o2 == expr->VL_VALUE - and ((oper == AND) || (oper == OR)) - */ - if ((oper == AND) == (expr->VL_VALUE != (arith)0)) { - (*expp)->ex_flags |= expr->ex_flags; - free_expression(expr); - } - else { - if (oper == OR) - expr->VL_VALUE = (arith)1; - ch7bin(expp, ',', expr); - } - } - else { - *expp = new_oper(int_type, *expp, oper, expr); - } - (*expp)->ex_flags |= EX_LOGICAL; - break; - - case ':': - if ( is_struct_or_union((*expp)->ex_type->tp_fund) - || is_struct_or_union(expr->ex_type->tp_fund) - ) { - if (!equal_type((*expp)->ex_type, expr->ex_type)) - expr_error(*expp, "illegal balance"); - } - else - relbalance(expp, oper, &expr); -#ifdef LINT - if ( (is_cp_cst(*expp) && is_cp_cst(expr)) - && (*expp)->VL_VALUE == expr->VL_VALUE - ) { - hwarning("operands of : are constant and equal"); - } -#endif LINT - *expp = new_oper((*expp)->ex_type, *expp, oper, expr); - break; - - case '?': - opnd2logical(expp, oper); - if (is_cp_cst(*expp)) { -#ifdef LINT - hwarning("condition in ?: expression is constant"); -#endif LINT - *expp = (*expp)->VL_VALUE ? - expr->OP_LEFT : expr->OP_RIGHT; - } - else { - *expp = new_oper(expr->ex_type, *expp, oper, expr); - } - break; - - case ',': - if (is_cp_cst(*expp)) - *expp = expr; - else - *expp = new_oper(expr->ex_type, *expp, oper, expr); - (*expp)->ex_flags |= EX_COMMA; - break; - } -} - -pntminuspnt(expp, oper, expr) - register struct expr **expp, *expr; -{ - /* Subtracting two pointers is so complicated it merits a - routine of its own. - */ - struct type *up_type = (*expp)->ex_type->tp_up; - - if (!equal_type(up_type, expr->ex_type->tp_up)) { - expr_error(*expp, "subtracting incompatible pointers"); - free_expression(expr); - erroneous2int(expp); - return; - } - /* we hope the optimizer will eliminate the load-time - pointer subtraction - */ - *expp = new_oper((*expp)->ex_type, *expp, oper, expr); - ch7cast(expp, CAST, pa_type); /* ptr-ptr: result has pa_type */ - ch7bin(expp, '/', - intexpr(size_of_type(up_type, "object"), pa_type->tp_fund)); - ch7cast(expp, CAST, int_type); /* result will be an integer expr */ -} - -mk_binop(expp, oper, expr, commutative) - struct expr **expp; - register struct expr *expr; -{ - /* Constructs in *expp the operation indicated by the operands. - "commutative" indicates whether "oper" is a commutative - operator. - */ - register struct expr *ex = *expp; - - if (is_cp_cst(expr) && is_cp_cst(ex)) - cstbin(expp, oper, expr); - else if (is_fp_cst(expr) && is_fp_cst(ex)) - fltcstbin(expp, oper, expr); - else { - *expp = (commutative && expr->ex_depth >= ex->ex_depth) ? - new_oper(ex->ex_type, expr, oper, ex) : - new_oper(ex->ex_type, ex, oper, expr); - } -} - -pointer_arithmetic(expp1, oper, expp2) - register struct expr **expp1, **expp2; -{ - int typ; - /* prepares the integral expression expp2 in order to - apply it to the pointer expression expp1 - */ - if ((typ = any2arith(expp2, oper)) == FLOAT - || typ == DOUBLE - || typ == LNGDBL) { - expr_error(*expp2, - "illegal combination of %s and pointer", - symbol2str(typ)); - erroneous2int(expp2); - } - ch7bin( expp2, '*', - intexpr(size_of_type((*expp1)->ex_type->tp_up, "object"), - pa_type->tp_fund) - ); -} - -pointer_binary(expp, oper, expr) - register struct expr **expp, *expr; -{ - /* constructs the pointer arithmetic expression out of - a pointer expression, a binary operator and an integral - expression. - */ - if (is_ld_cst(expr) && is_ld_cst(*expp)) - cstbin(expp, oper, expr); - else - *expp = new_oper((*expp)->ex_type, *expp, oper, expr); -} diff --git a/lang/cem/cemcom.ansi/ch7mon.c b/lang/cem/cemcom.ansi/ch7mon.c deleted file mode 100644 index ab3e38642..000000000 --- a/lang/cem/cemcom.ansi/ch7mon.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* SEMANTIC ANALYSIS (CHAPTER 3.3) -- MONADIC OPERATORS */ - -#include "botch_free.h" -#include -#include "nobitfield.h" -#include "Lpars.h" -#include -#include "arith.h" -#include "type.h" -#include "label.h" -#include "expr.h" -#include "idf.h" -#include "def.h" - -extern char options[]; -extern arith full_mask[/*MAXSIZE*/]; /* cstoper.c */ -char *symbol2str(); - -ch7mon(oper, expp) - register struct expr **expp; -{ - /* The monadic prefix operator oper is applied to *expp. - */ - register struct expr *expr; - - switch (oper) { - case '*': /* 3.3.3.2 */ - /* no FIELD type allowed */ - if ((*expp)->ex_type->tp_fund == ARRAY) - array2pointer(*expp); - if ((*expp)->ex_type->tp_fund != POINTER) { - if ((*expp)->ex_type->tp_fund != FUNCTION) { - expr_error(*expp, - "* applied to non-pointer (%s)", - symbol2str((*expp)->ex_type->tp_fund)); - } else { - warning("superfluous use of * on function"); - /* ignore indirection (yegh) */ - } - } else { - expr = *expp; - if (expr->ex_lvalue == 0 && expr->ex_class != String) - /* dereference in administration only */ - expr->ex_type = expr->ex_type->tp_up; - else /* runtime code */ - *expp = new_oper(expr->ex_type->tp_up, NILEXPR, - '*', expr); - (*expp)->ex_lvalue = ( - (*expp)->ex_type->tp_fund != ARRAY && - (*expp)->ex_type->tp_fund != FUNCTION - ); - if ((*expp)->ex_type->tp_typequal & TQ_CONST) - (*expp)->ex_flags |= EX_READONLY; - if ((*expp)->ex_type->tp_typequal & TQ_VOLATILE) - (*expp)->ex_flags |= EX_VOLATILE; - (*expp)->ex_flags &= ~EX_ILVALUE; - } - break; - case '&': - if ((*expp)->ex_type->tp_fund == ARRAY) { - expr_warning(*expp, "& before array ignored"); - array2pointer(*expp); - } - else - if ((*expp)->ex_type->tp_fund == FUNCTION) { - expr_warning(*expp, "& before function ignored"); - function2pointer(*expp); - } - else -#ifndef NOBITFIELD - if ((*expp)->ex_type->tp_fund == FIELD) - expr_error(*expp, "& applied to field variable"); - else -#endif NOBITFIELD - if (!(*expp)->ex_lvalue) - expr_error(*expp, "& applied to non-lvalue"); - else if ((*expp)->ex_flags & EX_ILVALUE) - expr_error(*expp, "& applied to illegal lvalue"); - else { - /* assume that enums are already filtered out */ - if (ISNAME(*expp)) { - register struct def *def = - (*expp)->VL_IDF->id_def; - - /* & indicates that - cannot be used as register - anymore - */ - if (def->df_sc == REGISTER) { - expr_error(*expp, - "& on register variable not allowed"); - break; /* break case '&' */ - } - } - (*expp)->ex_type = pointer_to((*expp)->ex_type, - (*expp)->ex_type->tp_typequal); - (*expp)->ex_lvalue = 0; - (*expp)->ex_flags &= ~EX_READONLY; - } - break; - case '~': - { - int fund = (*expp)->ex_type->tp_fund; - - if (fund == FLOAT || fund == DOUBLE || fund == LNGDBL) { - expr_error( *expp, - "~ not allowed on %s operands", - symbol2str(fund)); - erroneous2int(expp); - break; - } - /* FALLTHROUGH */ - } - case '-': - any2arith(expp, oper); - if (is_cp_cst(*expp)) { - arith o1 = (*expp)->VL_VALUE; - - (*expp)->VL_VALUE = (oper == '-') ? -o1 : - ((*expp)->ex_type->tp_unsigned ? - (~o1) & full_mask[(*expp)->ex_type->tp_size] : - ~o1 - ); - } - else - if (is_fp_cst(*expp)) - switch_sign_fp(*expp); - else - *expp = new_oper((*expp)->ex_type, - NILEXPR, oper, *expp); - break; - case '!': - if ((*expp)->ex_type->tp_fund == FUNCTION) - function2pointer(*expp); - if ((*expp)->ex_type->tp_fund != POINTER) - any2arith(expp, oper); - opnd2test(expp, '!'); - if (is_cp_cst(*expp)) { - (*expp)->VL_VALUE = !((*expp)->VL_VALUE); - (*expp)->ex_type = int_type; /* a cast ???(EB) */ - } - else - *expp = new_oper(int_type, NILEXPR, oper, *expp); - (*expp)->ex_flags |= EX_LOGICAL; - break; - case PLUSPLUS: - case MINMIN: - ch7incr(expp, oper); - break; - case SIZEOF: - if (ISNAME(*expp) && (*expp)->VL_IDF->id_def->df_formal_array) - expr_warning(*expp, "sizeof formal array %s is sizeof pointer!", - (*expp)->VL_IDF->id_text); - expr = intexpr((*expp)->ex_class == String ? - (arith)((*expp)->SG_LEN) : - size_of_type((*expp)->ex_type, "object"), - INT); - expr->ex_flags |= EX_SIZEOF; - free_expression(*expp); - *expp = expr; - break; - } -} diff --git a/lang/cem/cemcom.ansi/decspecs.str b/lang/cem/cemcom.ansi/decspecs.str deleted file mode 100644 index 0895f9720..000000000 --- a/lang/cem/cemcom.ansi/decspecs.str +++ /dev/null @@ -1,21 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* DECLARATION SPECIFIER DEFINITION */ - -struct decspecs { - struct decspecs *next; - struct type *ds_type; /* single type */ - int ds_notypegiven; /* set if type not given explicitly */ - int ds_typedef; /* 1 if type was a user typedef */ - int ds_sc_given; /* 1 if the st. class is explicitly given */ - int ds_sc; /* storage class, given or implied */ - int ds_size; /* LONG, SHORT or 0 */ - int ds_unsigned; /* SIGNED, UNSIGNED or 0 */ - int ds_typequal; /* type qualifiers - see type.str */ -}; - -extern struct type *qualifier_type(); -extern struct decspecs null_decspecs; diff --git a/lang/cem/cemcom.ansi/l_dummy.c b/lang/cem/cemcom.ansi/l_dummy.c deleted file mode 100644 index f0633a615..000000000 --- a/lang/cem/cemcom.ansi/l_dummy.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -/* - *The following functions are hacked to null-functions (i.e. they - * do nothing). This needs another solution in the future. - */ -#include "lint.h" - -#ifdef LINT - -#include "arith.h" -#include "label.h" - -C_close(){} -int C_busy(){return 0;} - - -/* More routines */ -/* ARGSUSED */ -CC_bhcst(ps_xxx,n,w,i) arith n,w; {} -/* ARGSUSED */ -CC_crcst(ps_xxx,v) arith v; {} -/* ARGSUSED */ -CC_crdlb(ps_xxx,v,s) label v; arith s; {} -/* ARGSUSED */ -CC_crdnam(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_crfcon(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_cricon(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_crilb(ps_xxx,v) label v; {} -/* ARGSUSED */ -CC_crpnam(ps_xxx,v) char *v; {} -/* ARGSUSED */ -CC_crscon(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_crucon(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_cst(l) {} -/* ARGSUSED */ -CC_dfdlb(l) label l; {} -/* ARGSUSED */ -CC_dfdnam(s) char *s; {} -/* ARGSUSED */ -CC_dfilb(l) label l; {} -/* ARGSUSED */ -CC_end(l) arith l; {} -CC_msend() {} -/* ARGSUSED */ -CC_msstart(ms) {} -/* ARGSUSED */ -CC_opcst(op_xxx,c) arith c; {} -/* ARGSUSED */ -CC_opdlb(op_xxx,g,o) label g; arith o; {} -/* ARGSUSED */ -CC_opilb(op_xxx,b) label b; {} -/* ARGSUSED */ -CC_oppnam(op_xxx,p) char *p; {} -/* ARGSUSED */ -CC_pronarg(s) char *s; {} -/* ARGSUSED */ -CC_psdlb(ps_xxx,l) label l; {} -/* ARGSUSED */ -CC_psdnam(ps_xxx,s) char *s; {} -/* ARGSUSED */ -CC_pspnam(ps_xxx,s) char *s; {} -/* ARGSUSED */ -CC_scon(v,s) char *s; {} -#endif LINT diff --git a/lang/cem/cemcom.ansi/mcomm.c b/lang/cem/cemcom.ansi/mcomm.c deleted file mode 100644 index c811685c4..000000000 --- a/lang/cem/cemcom.ansi/mcomm.c +++ /dev/null @@ -1,246 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* mcomm.c -- change ".lcomm name" into ".comm name" where "name" - is specified in a list. -*/ -#include - -#define IDFSIZE 4096 - -char *readfile(); - -struct node { - char *name; - struct node *left, *right; -}; - -char * -Malloc(n) - unsigned n; -{ - char *space; - char *malloc(); - - if ((space = malloc(n)) == 0) { - fprintf(stderr, "out of memory\n"); - exit(1); - } - return space; -} - -struct node *make_tree(); - -#define new_node() ((struct node *) Malloc(sizeof (struct node))) - -main(argc, argv) - char *argv[]; -{ - char *nl_file, *as_file; - char *nl_text, *as_text; - struct node *nl_tree = 0; - int nl_siz, as_siz; - - if (argc != 3) { - fprintf(stderr, "use: %s namelist assembler_file\n", argv[0]); - exit(1); - } - nl_file = argv[1]; - as_file = argv[2]; - - if ((nl_text = readfile(nl_file, &nl_siz)) == 0) { - fprintf(stderr, "%s: cannot read namelist %s\n", - argv[0], nl_file); - exit(1); - } - - if ((as_text = readfile(as_file, &as_siz)) == 0) { - fprintf(stderr, "%s: cannot read assembler file %s\n", - argv[0], as_file); - exit(1); - } - - nl_tree = make_tree(nl_text); - edit(as_text, nl_tree); - - if (writefile(as_file, as_text, as_siz) == 0) { - fprintf(stderr, "%s: cannot write to %s\n", argv[0], as_file); - exit(1); - } - return 0; -} - -#include -#include - -char * -readfile(filename, psiz) - char *filename; - int *psiz; -{ - struct stat stbuf; /* for `stat' to get filesize */ - register int fd; /* filedescriptor for `filename' */ - register char *cbuf; /* pointer to buffer to be returned */ - - if (((fd = open(filename, 0)) < 0) || (fstat(fd, &stbuf) != 0)) - return 0; - cbuf = Malloc(stbuf.st_size + 1); - if (read(fd, cbuf, stbuf.st_size) != stbuf.st_size) - return 0; - cbuf[stbuf.st_size] = '\0'; - close(fd); /* filedes no longer needed */ - *psiz = stbuf.st_size; - return cbuf; -} - -int -writefile(filename, text, size) - char *filename, *text; -{ - register fd; - - if ((fd = open(filename, 1)) < 0) - return 0; - if (write(fd, text, size) != size) - return 0; - close(fd); - return 1; -} - -struct node * -make_tree(nl) - char *nl; -{ - char *id = nl; - struct node *tree = 0; - - while (*nl) { - if (*nl == '\n') { - *nl = '\0'; - insert(&tree, id); - id = ++nl; - } - else { - ++nl; - } - } - return tree; -} - -insert(ptree, id) - struct node **ptree; - char *id; -{ - register cmp; - - if (*ptree == 0) { - register struct node *nnode = new_node(); - - nnode->name = id; - nnode->left = nnode->right = 0; - *ptree = nnode; - } - else - if ((cmp = strcmp((*ptree)->name, id)) < 0) - insert(&((*ptree)->right), id); - else - if (cmp > 0) - insert(&((*ptree)->left), id); -} - -struct node * -find(tree, id) - struct node *tree; - char *id; -{ - register cmp; - - if (tree == 0) - return 0; - if ((cmp = strcmp(tree->name, id)) < 0) - return find(tree->right, id); - if (cmp > 0) - return find(tree->left, id); - return tree; -} - -edit(text, tree) - char *text; - struct node *tree; -{ - register char *ptr = text; - char idbuf[IDFSIZE]; - register char *id; - register char *save_ptr; - - while (*ptr) { - if ( - *ptr == '.' && - *++ptr == 'l' && - *++ptr == 'c' && - *++ptr == 'o' && - *++ptr == 'm' && - *++ptr == 'm' && - (*++ptr == ' ' || *ptr == '\t') - ) - { - save_ptr = ptr - 6; - while (*++ptr == ' ' || *ptr == '\t') - ; - if (*ptr == '_') - ++ptr; - if (InId(*ptr)) { - id = &idbuf[0]; - *id++ = *ptr++; - while (InId(*ptr)) - *id++ = *ptr++; - *id = '\0'; - if (find(tree, idbuf) != 0) { - *save_ptr++ = ' '; - *save_ptr++ = '.'; - } - } - } - while (*ptr && *ptr++ != '\n') - ; - } -} - -InId(c) -{ - switch (c) { - - case 'a': case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': case 'y': - case 'z': - case 'A': case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': case 'Y': - case 'Z': - case '_': - case '.': - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - return 1; - - default: - return 0; - } -} - -puttree(nd) - struct node *nd; -{ - if (nd) { - puttree(nd->left); - printf("%s\n", nd->name); - puttree(nd->right); - } -} diff --git a/lang/cem/cemcom.ansi/nmclash.c b/lang/cem/cemcom.ansi/nmclash.c deleted file mode 100644 index e820442de..000000000 --- a/lang/cem/cemcom.ansi/nmclash.c +++ /dev/null @@ -1,9 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* Accepted if many characters of long names are significant */ -/* $Header$ */ -abcdefghijklmnopr() { } -abcdefghijklmnopq() { } -main() { } diff --git a/lang/cem/cemcom.ansi/scan.c b/lang/cem/cemcom.ansi/scan.c deleted file mode 100644 index d5b259e12..000000000 --- a/lang/cem/cemcom.ansi/scan.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* PREPROCESSOR: SCANNER FOR THE ACTUAL PARAMETERS OF MACROS */ - -#include "nopp.h" - -#ifndef NOPP -/* This file contains the function getactuals() which scans an actual - parameter list and splits it up into a list of strings, each one - representing an actual parameter. -*/ - -#include "lapbuf.h" /* UF */ -#include "nparams.h" /* UF */ - -#include "input.h" -#include "class.h" -#include "idf.h" -#include "macro.h" -#include "interface.h" -#include "file_info.h" - -#define EOS '\0' -#define overflow() (fatal("actual parameter buffer overflow")) - -PRIVATE char apbuf[LAPBUF]; /* temporary storage for actual parameters */ -PRIVATE char *actparams[NPARAMS]; /* pointers to the text of the actuals */ -PRIVATE char *aptr; /* pointer to last inserted character in apbuf */ - -#define copy(ch) ((aptr < &apbuf[LAPBUF]) ? (*aptr++ = ch) : overflow()) - -PRIVATE int nr_of_params; /* number of actuals read until now */ - -PRIVATE char ** -getactuals(idef) - register struct idf *idef; -{ - /* getactuals() collects the actual parameters and turns them - into a list of strings, a pointer to which is returned. - */ - register acnt = idef->id_macro->mc_nps; - - nr_of_params = 0; - actparams[0] = aptr = &apbuf[0]; - copyact('(', ')', 0); /* read the actual parameters */ - copy(EOS); /* mark the end of it all */ - - if (!nr_of_params++) { /* 0 or 1 parameter */ - /* there could be a ( ) - */ - register char *p = actparams[0]; - - while ((class(*p) == STSKIP) || (*p == '\n')) { - ++p; - } - - if (!*p) { /* the case () : 0 parameters */ - nr_of_params--; - } - } - - if (nr_of_params != acnt) { - /* argument mismatch: too many or too few - actual parameters. - */ - lexwarning("argument mismatch, %s", idef->id_text); - - while (nr_of_params < acnt) { - /* too few paraeters: remaining actuals are "" - */ - actparams[nr_of_params] = ""; - nr_of_params++; - } - } - - return actparams; -} - -PRIVATE -copyact(ch1, ch2, lvl) - char ch1, ch2; - int lvl; -{ - /* copyact() is taken from Ceriel Jacobs' LLgen, with - permission. Its task is to build a list of actuals - parameters, which list is surrounded by '(' and ')' and in - which the parameters are separated by ',' if there are - more than 1. The balancing of '(',')' and '[',']' and - '{','}' is taken care of by calling this function - recursively. At each level lvl, copyact() reads the input, - upto the corresponding closing bracket. - - Opening bracket is ch1, closing bracket is ch2. If - lvl != 0, copy opening and closing parameters too. - */ - register int ch; /* Current char */ - register int match; /* used to read strings */ - - if (lvl) { - copy(ch1); - } - - for (;;) { - LoadChar(ch); - - if (ch == ch2) { - if (lvl) { - copy(ch); - } - return; - } - - switch(ch) { - -#ifdef __MATCHING_PAR__ - case ')': - case '}': - case ']': - lexerror("unbalanced parenthesis"); - break; -#endif __MATCHING_PAR__ - - case '(': - copyact('(', ')', lvl+1); - break; - -#ifdef __MATCHING_PAR__ - case '{': - /* example: - #define declare(v, t) t v - declare(v, union{int i, j; float r;}); - */ - copyact('{', '}', lvl+1); - break; - - case '[': - copyact('[', ']', lvl+1); - break; -#endif __MATCHING_PAR__ - - case '\n': - LineNumber++; - while (LoadChar(ch), ch == '#') { - /* This piece of code needs some - explanation: consider the call of - the macro defined as: - #define sum(b,c) (b + c) - in the following form: - sum( - #include my_phone_number - ,2) - in which case the include must be - interpreted as such. - */ - domacro(); /* has read nl, vt or ff */ - /* Loop, for another control line */ - } - - PushBack(); - copy(' '); - break; - - case '/': - LoadChar(ch); - - if (ch == '*' && !InputLevel) { /* skip comment */ - skipcomment(); - continue; - } - - PushBack(); - copy('/'); - break; - - case ',': - if (!lvl) { - /* next parameter encountered */ - copy(EOS); - - if (++nr_of_params >= NPARAMS) { - fatal("too many actual parameters"); - } - - actparams[nr_of_params] = aptr; - } - else { - copy(ch); - } - break; - - case '\'': - case '"' : - /* watch out for brackets in strings, they do - not count ! - */ - match = ch; - copy(ch); - while (LoadChar(ch), ch != EOI) { - if (ch == match) { - break; - } - - if (ch == '\\') { - copy(ch); - LoadChar(ch); - } - else - if (ch == '\n') { - lexerror("newline in string"); - LineNumber++; - copy(match); - break; - } - - copy(ch); - } - - if (ch == match) { - copy(ch); - break; - } - /* Fall through */ - - case EOI : - lexerror("unterminated macro call"); - return; - - default: - copy(ch); - break; - } - } -} -#endif NOPP diff --git a/lang/cem/cemcom/Files b/lang/cem/cemcom/Files deleted file mode 100644 index 13726df5c..000000000 --- a/lang/cem/cemcom/Files +++ /dev/null @@ -1,88 +0,0 @@ -Files -cem.1 -cem.c -cemcom.1 -Parameters -Makefile -LLlex.c -LLlex.h -LLmessage.c -align.h -alloc.c -alloc.h -arith.c -arith.h -asm.c -assert.h -atw.h -blocks.c -char.tab -ch7.c -ch7bin.c -ch7mon.c -class.h -code.c -code.str -conversion.c -cstoper.c -dataflow.c -declar.g -declarator.c -declar.str -decspecs.c -decspecs.str -def.str -domacro.c -dumpidf.c -error.c -eval.c -expr.c -expr.str -expression.g -faulty.h -field.c -field.str -file_info.h -idf.c -idf.str -init.c -input.c -input.h -interface.h -ival.c -label.c -label.h -level.h -macro.str -main.c -make.allocd -make.hfiles -make.next -make.tokcase -make.tokfile -mcomm.c -mes.h -options -options.c -program.g -replace.c -scan.c -sizes.h -skip.c -specials.h -stack.c -stack.str -statement.g -stb.c -storage.c -storage.h -stmt.str -struct.c -struct.str -switch.c -switch.str -tab.c -tokenname.c -tokenname.h -type.c -type.str diff --git a/lang/cem/cemcom/LintPars b/lang/cem/cemcom/LintPars deleted file mode 100644 index 82273bc3e..000000000 --- a/lang/cem/cemcom/LintPars +++ /dev/null @@ -1,146 +0,0 @@ -!File: lint.h -#define LINT 1 /* if defined, 'lint' is produced */ - - -!File: pathlength.h -#define PATHLENGTH 1024 /* max. length of path to file */ - - -!File: errout.h -#define ERROUT STDERR /* file pointer for writing messages */ -#define ERR_SHADOW 0 /* a syntax error overshadows error messages - until ERR_SHADOW symbols have been - accepted without syntax error */ - - -!File: idfsize.h -#define IDFSIZE 64 /* maximum significant length of an identifier */ - - -!File: numsize.h -#define NUMSIZE 256 /* maximum length of a numeric constant */ - - -!File: nparams.h -#define NPARAMS 32 /* maximum number of parameters of macros */ - - -!File: ifdepth.h -#define IFDEPTH 256 /* maximum number of nested if-constructions */ - - -!File: density.h -#define DENSITY 2 /* see switch.[ch] for an explanation */ - - -!File: lapbuf.h -#define LAPBUF 4096 /* size of macro actual parameter buffer */ - - -!File: strsize.h -#define ISTRSIZE 32 /* minimum number of bytes allocated for - storing a string */ -#define RSTRSIZE 8 /* step size in enlarging the memory for - the storage of a string */ - - -!File: target_sizes.h -#define MAXSIZE 8 /* the maximum of the SZ_* constants */ - -/* target machine sizes */ -#define SZ_CHAR (arith)1 -#define SZ_SHORT (arith)2 -#define SZ_WORD (arith)4 -#define SZ_INT (arith)4 -#define SZ_LONG (arith)4 -#ifndef NOFLOAT -#define SZ_FLOAT (arith)4 -#define SZ_DOUBLE (arith)8 -#endif NOFLOAT -#define SZ_POINTER (arith)4 - -/* target machine alignment requirements */ -#define AL_CHAR 1 -#define AL_SHORT SZ_SHORT -#define AL_WORD SZ_WORD -#define AL_INT SZ_WORD -#define AL_LONG SZ_WORD -#ifndef NOFLOAT -#define AL_FLOAT SZ_WORD -#define AL_DOUBLE SZ_WORD -#endif NOFLOAT -#define AL_POINTER SZ_WORD -#define AL_STRUCT 1 -#define AL_UNION 1 - - -!File: botch_free.h -#undef BOTCH_FREE 1 /* when defined, botch freed memory, as a check */ - - -!File: dataflow.h -#undef DATAFLOW 1 /* produce some compile-time xref */ - - -!File: debug.h -#undef DEBUG 1 /* perform various self-tests */ - - -!File: use_tmp.h -#undef PREPEND_SCOPES 1 /* collect exa, exp, ina and inp commands - and if USE_TMP is defined let them - precede the rest of the generated - compact code */ -#undef USE_TMP 1 /* use C_insertpart, C_endpart mechanism - to generate EM-code in the order needed - for the code-generators. If not defined, - the old-style peephole optimizer is - needed. */ - - -!File: parbufsize.h -#define PARBUFSIZE 1024 - - -!File: textsize.h -#define ITEXTSIZE 8 /* 1st piece of memory for repl. text */ -#define RTEXTSIZE 8 /* stepsize for enlarging repl.text */ - - -!File: inputtype.h -#define INP_READ_IN_ONE 1 /* read input file in one */ - - -!File: nopp.h -#undef NOPP 1 /* if NOT defined, use built-int preprocessor */ - - -!File: nobitfield.h -#undef NOBITFIELD 1 /* if NOT defined, implement bitfields */ - - -!File: spec_arith.h -/* describes internal compiler arithmetics */ -#undef SPECIAL_ARITHMETICS /* something different from native long */ - - -!File: static.h -#define GSTATIC /* for large global "static" arrays */ - - -!File: nofloat.h -#undef NOFLOAT 1 /* if NOT defined, floats are implemented */ - - -!File: noRoption.h -#undef NOROPTION 1 /* if NOT defined, R option is implemented */ - - -!File: nocross.h -#undef NOCROSS 1 /* if NOT defined, cross compiler */ - - -!File: regcount.h -#undef REGCOUNT 1 /* count occurrences for register messages */ - - diff --git a/lang/cem/cemcom/Parameters b/lang/cem/cemcom/Parameters deleted file mode 100644 index 226c44716..000000000 --- a/lang/cem/cemcom/Parameters +++ /dev/null @@ -1,139 +0,0 @@ -!File: lint.h -#undef LINT 1 /* if defined, 'lint' is produced */ - - -!File: pathlength.h -#define PATHLENGTH 1024 /* max. length of path to file */ - - -!File: errout.h -#define ERROUT STDERR /* file pointer for writing messages */ -#define MAXERR_LINE 5 /* maximum number of error messages given - on the same input line. */ - - -!File: idfsize.h -#define IDFSIZE 64 /* maximum significant length of an identifier */ - - -!File: numsize.h -#define NUMSIZE 256 /* maximum length of a numeric constant */ - - -!File: nparams.h -#define NPARAMS 32 /* maximum number of parameters of macros */ - - -!File: ifdepth.h -#define IFDEPTH 256 /* maximum number of nested if-constructions */ - - -!File: density.h -#define DENSITY 2 /* see switch.[ch] for an explanation */ - - -!File: lapbuf.h -#define LAPBUF 4096 /* size of macro actual parameter buffer */ - - -!File: strsize.h -#define ISTRSIZE 32 /* minimum number of bytes allocated for - storing a string */ -#define RSTRSIZE 8 /* step size in enlarging the memory for - the storage of a string */ - - -!File: target_sizes.h -#define MAXSIZE 8 /* the maximum of the SZ_* constants */ - -/* target machine sizes */ -#define SZ_CHAR (arith)1 -#define SZ_SHORT (arith)2 -#define SZ_WORD (arith)4 -#define SZ_INT (arith)4 -#define SZ_LONG (arith)4 -#ifndef NOFLOAT -#define SZ_FLOAT (arith)4 -#define SZ_DOUBLE (arith)8 -#endif NOFLOAT -#define SZ_POINTER (arith)4 - -/* target machine alignment requirements */ -#define AL_CHAR 1 -#define AL_SHORT SZ_SHORT -#define AL_WORD SZ_WORD -#define AL_INT SZ_WORD -#define AL_LONG SZ_WORD -#ifndef NOFLOAT -#define AL_FLOAT SZ_WORD -#define AL_DOUBLE SZ_WORD -#endif NOFLOAT -#define AL_POINTER SZ_WORD -#define AL_STRUCT 1 -#define AL_UNION 1 - - -!File: botch_free.h -#undef BOTCH_FREE 1 /* when defined, botch freed memory, as a check */ - - -!File: dataflow.h -#define DATAFLOW 1 /* produce some compile-time xref */ - - -!File: debug.h -#undef DEBUG 1 /* perform various self-tests */ - - -!File: use_tmp.h -#define USE_TMP 1 /* collect exa, exp, ina and inp commands - and let them precede the rest of - the generated compact code */ - - -!File: parbufsize.h -#define PARBUFSIZE 1024 - - -!File: textsize.h -#define ITEXTSIZE 8 /* 1st piece of memory for repl. text */ -#define RTEXTSIZE 8 /* stepsize for enlarging repl.text */ - - -!File: inputtype.h -#define INP_READ_IN_ONE 1 /* read input file in one */ - - -!File: nopp.h -#undef NOPP 1 /* if NOT defined, use built-int preprocessor */ - - -!File: nobitfield.h -#undef NOBITFIELD 1 /* if NOT defined, implement bitfields */ - - -!File: spec_arith.h -/* describes internal compiler arithmetics */ -#undef SPECIAL_ARITHMETICS /* something different from native long */ - - -!File: static.h -#define GSTATIC /* for large global "static" arrays */ - - -!File: nofloat.h -#undef NOFLOAT 1 /* if NOT defined, floats are implemented */ - - -!File: noRoption.h -#undef NOROPTION 1 /* if NOT defined, R option is implemented */ - - -!File: nocross.h -#undef NOCROSS 1 /* if NOT defined, cross compiler */ - - -!File: regcount.h -#undef REGCOUNT 1 /* count occurrences for register messages */ - - diff --git a/lang/cem/cemcom/Resolve b/lang/cem/cemcom/Resolve deleted file mode 100755 index acb50f49c..000000000 --- a/lang/cem/cemcom/Resolve +++ /dev/null @@ -1,67 +0,0 @@ -: create a directory Xsrc with name clashes resolved -: and run make in that directory -: '$Header$' - -case $# in -1) - ;; -*) echo "$0: one argument expected" 1>&2 - exit 1 - ;; -esac -PW=`pwd` -options= -case $1 in -main|emain|lnt) - target=$PW/$1 - ;; -omain) - target=$PW/$1 - options=-DPEEPHOLE - ;; -cemain) - target=$PW/$1 - options=-DCODE_EXPANDER - ;; -Xlint) - target=$1 - ;; -*) echo "$0: $1: Illegal argument" 1>&2 - exit 1 - ;; -esac -if test -d ../Xsrc -then - : -else mkdir ../Xsrc -fi -make EMHOME=$EMHOME longnames -: remove code generating routines from the clashes list as they are defines. -: code generating routine names start with C_ -sed '/^C_/d' < longnames > tmp$$ -cclash -c -l7 tmp$$ > ../Xsrc/Xclashes -rm -f tmp$$ -cd ../Xsrc -if cmp -s Xclashes clashes -then - : -else - mv Xclashes clashes -fi -rm -f Makefile -for i in `cat $PW/Cfiles` -do - cat >> Makefile < $i -EOF -done -make EMHOME=$EMHOME `cat $PW/Cfiles` -rm -f Makefile -ed - $PW/Makefile <<'EOF' -/^#EXCLEXCL/,/^#INCLINCL/d -w Makefile -q -EOF -make EMHOME=$EMHOME COPTIONS=$options MACH=$mach CURRDIR=$PW/ $target diff --git a/lang/cem/cemcom/Version.c b/lang/cem/cemcom/Version.c deleted file mode 100644 index 838ce26e5..000000000 --- a/lang/cem/cemcom/Version.c +++ /dev/null @@ -1,8 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#ifndef lint -static char Version[] = "ACK CEM compiler Version 3.2"; -#endif lint diff --git a/lang/cem/cemcom/alloc.c b/lang/cem/cemcom/alloc.c deleted file mode 100644 index cb431a4b5..000000000 --- a/lang/cem/cemcom/alloc.c +++ /dev/null @@ -1,159 +0,0 @@ -/* $Header$ */ -/* M E M O R Y A L L O C A T I O N R O U T I N E S */ - -/* The allocation of memory in this program, which plays an important - role in reading files, replacing macros and building expression - trees, is not performed by malloc etc. The reason for having own - memory allocation routines (malloc(), realloc() and free()) is - plain: the garbage collection performed by the library functions - malloc(), realloc() and free() costs a lot of time, while in most - cases (on a VAX) the freeing and reallocation of memory is not - necessary. The only reallocation done in this program is at - building strings in memory. This means that the last - (re-)allocated piece of memory can be extended. - - The (basic) memory allocating routines offered by this memory - handling package are: - - char *malloc(n) : allocate n bytes - char *realloc(ptr, n) : reallocate buffer to n bytes - (works only if ptr was last allocated) - free(ptr) : if ptr points to last allocated - memory, this memory is re-allocatable - Salloc(str, sz) : save string in malloc storage -*/ - -#include -#include "myalloc.h" /* UF */ -#include "debug.h" /* UF */ - -#include "alloc.h" -#include "assert.h" - -#ifdef OWNALLOC -char *sys_break(); -/* the following variables are used for book-keeping */ -static int nfreebytes = 0; /* # free bytes in sys_break space */ -static char *freeb; /* pointer to first free byte */ -static char *lastalloc; /* pointer to last malloced sp */ -static int lastnbytes; /* nr of bytes in last allocated */ - /* space */ -static char *firstfreeb = 0; - -#endif OWNALLOC - -char * -Salloc(str, sz) - register char str[]; - register int sz; -{ - /* Salloc() is not a primitive function: it just allocates a - piece of storage and copies a given string into it. - */ - char *res = Malloc(sz); - register char *m = res; - - while (sz--) - *m++ = *str++; - return res; -} - -#ifdef OWNALLOC - -#define ALIGN(m) (ALIGNSIZE * (((m) - 1) / ALIGNSIZE + 1)) - -char * -malloc(n) - unsigned n; -{ - /* malloc() is a very simple malloc(). - */ - n = ALIGN(n); - if (nfreebytes < n) { - register nbts = (n <= ALLOCSIZ) ? ALLOCSIZ : n; - - if (!nfreebytes) { - if ((freeb = sys_break(nbts)) == ILL_BREAK) - fatal("out of memory"); - } - else { - if (sys_break(nbts) == ILL_BREAK) - fatal("out of memory"); - } - nfreebytes += nbts; - } - lastalloc = freeb; - freeb = lastalloc + n; - lastnbytes = n; - nfreebytes -= n; - return lastalloc; -} - -/*ARGSUSED*/ -char * -realloc(ptr, n) - char *ptr; - unsigned n; -{ - /* realloc() is designed to append more bytes to the latest - allocated piece of memory. However reallocation should be - performed, even if the mentioned memory is not the latest - allocated one, this situation will not occur. To do so, - realloc should know how many bytes are allocated the last - time for that piece of memory. ???? - */ - register int nbytes = n; - - ASSERT(ptr == lastalloc); /* security */ - nbytes -= lastnbytes; /* # bytes required */ - if (nbytes == 0) /* no extra bytes */ - return lastalloc; - - /* if nbytes < 0: free last allocated bytes; - if nbytes > 0: allocate more bytes - */ - if (nbytes > 0) - nbytes = ALIGN(nbytes); - if (nfreebytes < nbytes) { - register int nbts = (nbytes < ALLOCSIZ) ? ALLOCSIZ : nbytes; - if (sys_break(nbts) == ILL_BREAK) - fatal("out of memory"); - nfreebytes += nbts; - } - freeb += nbytes; /* less bytes */ - lastnbytes += nbytes; /* change nr of last all. bytes */ - nfreebytes -= nbytes; /* less or more free bytes */ - return lastalloc; -} - -/* to ensure that the alloc library package will not be loaded: */ -/*ARGSUSED*/ -free(p) - char *p; -{} - -init_mem() -{ - firstfreeb = sys_break(0); - /* align the first memory unit to ALIGNSIZE ??? */ - if ((long) firstfreeb % ALIGNSIZE != 0) { - register char *fb = firstfreeb; - - fb = (char *)ALIGN((long)fb); - firstfreeb = sys_break(fb - firstfreeb); - firstfreeb = fb; - ASSERT((long)firstfreeb % ALIGNSIZE == 0); - } -} - -#ifdef DEBUG -mem_stat() -{ - extern char options[]; - - if (options['m']) - print("Total nr of bytes allocated: %d\n", - sys_break(0) - firstfreeb); -} -#endif DEBUG -#endif OWNALLOC diff --git a/lang/cem/cemcom/alloc.h b/lang/cem/cemcom/alloc.h deleted file mode 100644 index a6bafae42..000000000 --- a/lang/cem/cemcom/alloc.h +++ /dev/null @@ -1,16 +0,0 @@ -/* $Header$ */ -/* PROGRAM'S INTERFACE TO MEMORY ALLOCATION ROUTINES */ - -/* This file serves as the interface between the program and the - memory allocating routines. - There are 3 memory allocation routines: - char *Malloc(n) to allocate n bytes - char *Salloc(str, n) to allocate n bytes - and fill them with string str - char *Realloc(str, n) reallocate the string at str to n bytes -*/ - -extern char *Salloc(), *malloc(), *realloc(); - -#define Malloc(n) malloc((unsigned)(n)) -#define Srealloc(ptr,n) realloc(ptr, (unsigned)(n)) diff --git a/lang/cem/cemcom/code.h b/lang/cem/cemcom/code.h deleted file mode 100644 index 3399b3e02..000000000 --- a/lang/cem/cemcom/code.h +++ /dev/null @@ -1,23 +0,0 @@ -/* $Header$ */ -/* C O D E - G E N E R A T O R D E F I N I T I O N S */ - -struct stat_block { - struct stat_block *next; - label st_break; - label st_continue; -}; - - -/* allocation definitions of struct stat_block */ -/* ALLOCDEF "stat_block" */ -extern char *st_alloc(); -extern struct stat_block *h_stat_block; -#define new_stat_block() ((struct stat_block *) \ - st_alloc((char **)&h_stat_block, sizeof(struct stat_block))) -#define free_stat_block(p) st_free(p, h_stat_block, sizeof(struct stat_block)) - - -#define LVAL 0 -#define RVAL 1 -#define FALSE 0 -#define TRUE 1 diff --git a/lang/cem/cemcom/declarator.h b/lang/cem/cemcom/declarator.h deleted file mode 100644 index 5ecbb70c2..000000000 --- a/lang/cem/cemcom/declarator.h +++ /dev/null @@ -1,45 +0,0 @@ -/* $Header$ */ -/* DEFINITION OF DECLARATOR DESCRIPTORS */ - -/* A 'declarator' consists of an idf and a linked list of - language-defined unary operations: *, [] and (), called - decl_unary's. -*/ - -struct declarator { - struct declarator *next; - struct idf *dc_idf; - struct decl_unary *dc_decl_unary; - struct idstack_item *dc_fparams; /* params for function */ -}; - - -/* allocation definitions of struct declarator */ -/* ALLOCDEF "declarator" */ -extern char *st_alloc(); -extern struct declarator *h_declarator; -#define new_declarator() ((struct declarator *) \ - st_alloc((char **)&h_declarator, sizeof(struct declarator))) -#define free_declarator(p) st_free(p, h_declarator, sizeof(struct declarator)) - - -#define NO_PARAMS ((struct idstack_item *) 0) - -struct decl_unary { - struct decl_unary *next; - int du_fund; /* POINTER, ARRAY or FUNCTION */ - arith du_count; /* for ARRAYs only */ -}; - - -/* allocation definitions of struct decl_unary */ -/* ALLOCDEF "decl_unary" */ -extern char *st_alloc(); -extern struct decl_unary *h_decl_unary; -#define new_decl_unary() ((struct decl_unary *) \ - st_alloc((char **)&h_decl_unary, sizeof(struct decl_unary))) -#define free_decl_unary(p) st_free(p, h_decl_unary, sizeof(struct decl_unary)) - - -extern struct type *declare_type(); -extern struct declarator null_declarator; diff --git a/lang/cem/cemcom/decspecs.h b/lang/cem/cemcom/decspecs.h deleted file mode 100644 index 0b1598c0e..000000000 --- a/lang/cem/cemcom/decspecs.h +++ /dev/null @@ -1,23 +0,0 @@ -/* $Header$ */ -/* DECLARATION SPECIFIER DEFINITION */ - -struct decspecs { - struct decspecs *next; - struct type *ds_type; /* single type */ - int ds_sc_given; /* 1 if the st. class is explicitly given */ - int ds_sc; /* storage class, given or implied */ - int ds_size; /* LONG, SHORT or 0 */ - int ds_unsigned; /* 0 or 1 */ -}; - - -/* allocation definitions of struct decspecs */ -/* ALLOCDEF "decspecs" */ -extern char *st_alloc(); -extern struct decspecs *h_decspecs; -#define new_decspecs() ((struct decspecs *) \ - st_alloc((char **)&h_decspecs, sizeof(struct decspecs))) -#define free_decspecs(p) st_free(p, h_decspecs, sizeof(struct decspecs)) - - -extern struct decspecs null_decspecs; diff --git a/lang/cem/cemcom/def.h b/lang/cem/cemcom/def.h deleted file mode 100644 index abb281559..000000000 --- a/lang/cem/cemcom/def.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Header$ */ -/* IDENTIFIER DEFINITION DESCRIPTOR */ - -struct def { /* for ordinary tags */ - struct def *next; - int df_level; - struct type *df_type; - int df_sc; /* may be: - GLOBAL, STATIC, EXTERN, IMPLICIT, - TYPEDEF, - FORMAL, AUTO, - ENUM, LABEL - */ - int df_register; /* REG_NONE, REG_DEFAULT or REG_BONUS */ - char df_initialized; /* an initialization has been generated */ - char df_alloc; /* 0, ALLOC_SEEN or ALLOC_DONE */ - char df_used; /* set if idf is used */ - char df_formal_array; /* to warn if sizeof is taken */ - arith df_address; -}; - -#define ALLOC_SEEN 1 /* an allocating declaration has been seen */ -#define ALLOC_DONE 2 /* the allocating declaration has been done */ - -#define REG_NONE 0 /* no register candidate */ -#define REG_DEFAULT 1 /* register candidate, not declared as such */ -#define REG_BONUS 10 /* register candidate, declared as such */ - - -/* allocation definitions of struct def */ -/* ALLOCDEF "def" */ -extern char *st_alloc(); -extern struct def *h_def; -#define new_def() ((struct def *) \ - st_alloc((char **)&h_def, sizeof(struct def))) -#define free_def(p) st_free(p, h_def, sizeof(struct def)) - diff --git a/lang/cem/cemcom/doprnt.c b/lang/cem/cemcom/doprnt.c deleted file mode 100644 index 9cdc126fe..000000000 --- a/lang/cem/cemcom/doprnt.c +++ /dev/null @@ -1,144 +0,0 @@ -/* $Header$ */ -/* STRING MANIPULATION AND PRINT ROUTINES */ - -#include -#include "ssize.h" - -char *long2str(); - -static -integral(c) -{ - switch (c) { - case 'b': - return -2; - case 'd': - return 10; - case 'o': - return -8; - case 'u': - return -10; - case 'x': - return -16; - } - return 0; -} - -static int -format(buf, fmt, argp) - char *buf, *fmt; - char *argp; -{ - register char *pf = fmt, *pa = argp; - register char *pb = buf; - - while (*pf) { - if (*pf == '%') { - register width, base, pad, npad; - char *arg; - char cbuf[2]; - char *badformat = ""; - - /* get padder */ - if (*++pf == '0') { - pad = '0'; - ++pf; - } - else - pad = ' '; - - /* get width */ - width = 0; - while (*pf >= '0' && *pf <= '9') - width = 10 * width + *pf++ - '0'; - - /* get text and move pa */ - if (*pf == 's') { - arg = *(char **)pa; - pa += sizeof(char *); - } - else - if (*pf == 'c') { - cbuf[0] = * (char *) pa; - cbuf[1] = '\0'; - pa += sizeof(int); - arg = &cbuf[0]; - } - else - if (*pf == 'l') { - /* alignment ??? */ - if (base = integral(*++pf)) { - arg = long2str(*(long *)pa, base); - pa += sizeof(long); - } - else { - pf--; - arg = badformat; - } - } - else - if (base = integral(*pf)) { - arg = long2str((long)*(int *)pa, base); - pa += sizeof(int); - } - else - if (*pf == '%') - arg = "%"; - else - arg = badformat; - - npad = width - strlen(arg); - - while (npad-- > 0) - *pb++ = pad; - - while (*pb++ = *arg++); - pb--; - pf++; - } - else - *pb++ = *pf++; - } - return pb - buf; -} - -doprnt(fp, fmt, argp) - File *fp; - char *fmt; - int argp[]; -{ - char buf[SSIZE]; - - sys_write(fp, buf, format(buf, fmt, (char *)argp)); -} - -/*VARARGS1*/ -printf(fmt, args) - char *fmt; - char args; -{ - char buf[SSIZE]; - - sys_write(STDOUT, buf, format(buf, fmt, &args)); -} - -/*VARARGS1*/ -fprintf(fp, fmt, args) - File *fp; - char *fmt; - char args; -{ - char buf[SSIZE]; - - sys_write(fp, buf, format(buf, fmt, &args)); -} - -/*VARARGS1*/ -char * -sprintf(buf, fmt, args) - char *buf, *fmt; - char args; -{ - buf[format(buf, fmt, &args)] = '\0'; - return buf; -} diff --git a/lang/cem/cemcom/em.c b/lang/cem/cemcom/em.c deleted file mode 100644 index 7bd0bd10a..000000000 --- a/lang/cem/cemcom/em.c +++ /dev/null @@ -1,201 +0,0 @@ -/* $Header$ */ -/* EM CODE OUTPUT ROUTINES */ - -#define CMODE 0644 -#define MAX_ARG_CNT 32 - -#include "em.h" -#include -#include "arith.h" -#include "label.h" - -/* - putbyte(), C_open() and C_close() are the basic routines for - respectively write on, open and close the output file. - The put_*() functions serve as formatting functions of the - various EM language constructs. - See "Description of a Machine Architecture for use with - Block Structured Languages" par. 11.2 for the meaning of these - names. -*/ - -/* supply a kind of buffered output */ -#define flush(x) sys_write(ofp, &obuf[0], x) - -static char obuf[BUFSIZ]; -static char *opp = &obuf[0]; -File *ofp = 0; - -putbyte(b) /* shouldn't putbyte() be a macro ??? (EB) */ - int b; -{ - if (opp >= &obuf[BUFSIZ]) { /* flush if buffer overflows */ - if (flush(BUFSIZ) == 0) - sys_stop(S_ABORT); - opp = &obuf[0]; - } - *opp++ = (char) b; -} - -C_init(wsize, psize) - arith wsize, psize; -{} - -C_open(nm) /* open file for compact code output */ - char *nm; -{ - if (nm == 0) - ofp = STDOUT; /* standard output */ - else - if (sys_open(nm, OP_WRITE, &ofp) == 0) - return 0; - return 1; -} - -C_close() -{ - if (flush(opp - &obuf[0]) == 0) - sys_stop(S_ABORT); - opp = obuf; /* reset opp */ - if (ofp != STDOUT) - sys_close(ofp); - ofp = 0; -} - -C_busy() -{ - return ofp != 0; /* true if code is being generated */ -} - -/*** the compact code generating routines ***/ -#define fit16i(x) ((x) >= (long)0xFFFF8000 && (x) <= (long)0x00007FFF) -#define fit8u(x) ((x) <= 0xFF) /* x is already unsigned */ - -put_ilb(l) - label l; -{ - if (fit8u(l)) { - put8(sp_ilb1); - put8((int)l); - } - else { - put8(sp_ilb2); - put16(l); - } -} - -put_dlb(l) - label l; -{ - if (fit8u(l)) { - put8(sp_dlb1); - put8((int)l); - } - else { - put8(sp_dlb2); - put16(l); - } -} - -put_cst(l) - arith l; -{ - if (l >= (arith) -sp_zcst0 && l < (arith) (sp_ncst0 - sp_zcst0)) { - /* we can convert 'l' to an int because its value - can be stored in a byte. - */ - put8((int) l + (sp_zcst0 + sp_fcst0)); - } - else - if (fit16i(l)) { /* the cast from long to int causes no trouble here */ - put8(sp_cst2); - put16((int) l); - } - else { - put8(sp_cst4); - put32(l); - } -} - -put_doff(l, v) - label l; - arith v; -{ - if (v == 0) - put_dlb(l); - else { - put8(sp_doff); - put_dlb(l); - put_cst(v); - } -} - -put_noff(s, v) - char *s; - arith v; -{ - if (v == 0) - put_dnam(s); - else { - put8(sp_doff); - put_dnam(s); - put_cst(v); - } -} - -put_dnam(s) - char *s; -{ - put8(sp_dnam); - put_str(s); -} - -put_pnam(s) - char *s; -{ - put8(sp_pnam); - put_str(s); -} - -#ifdef ____ -put_fcon(s, sz) - char *s; - arith sz; -{ - put8(sp_fcon); - put_cst(sz); - put_str(s); -} -#endif ____ - -put_wcon(sp, v, sz) /* sp_icon, sp_ucon or sp_fcon with int repr */ - int sp; - char *v; - arith sz; -{ - /* how 'bout signextension int --> long ??? */ - put8(sp); - put_cst(sz); - put_str(v); -} - -put_str(s) - char *s; -{ - register int len; - - put_cst((arith) (len = strlen(s))); - while (--len >= 0) - put8(*s++); -} - -put_cstr(s) - char *s; -{ - register int len = prepare_string(s); - - put8(sp_scon); - put_cst((arith) len); - while (--len >= 0) - put8(*s++); -} diff --git a/lang/cem/cemcom/em.h b/lang/cem/cemcom/em.h deleted file mode 100644 index 7d9de7899..000000000 --- a/lang/cem/cemcom/em.h +++ /dev/null @@ -1,42 +0,0 @@ -/* $Header$ */ -/* DESCRIPTION OF INTERFACE TO EM CODE GENERATING ROUTINES */ - -#include "proc_intf.h" /* use macros or functions */ - -/* include the EM description files */ -#include -#include -#include -#include -#include - -/* macros used in the definitions of the interface functions C_* */ -#define OP(x) put_op(x) -#define CST(x) put_cst(x) -#define DCST(x) put_cst(x) -#define CSTR(x) put_cstr(x) -#define PS(x) put_ps(x) -#define DLB(x) put_dlb(x) -#define ILB(x) put_ilb(x) -#define NOFF(x,y) put_noff((x), (y)) -#define DOFF(x,y) put_doff((x), (y)) -#define PNAM(x) put_pnam(x) -#define DNAM(x) put_dnam(x) -#define CEND() put_cend() -#define WCON(x,y,z) put_wcon((x), (y), (z)) -#define FCON(x,y) put_fcon((x), (y)) - -/* variants of primitive "putbyte" */ -#define put8(x) putbyte(x) /* defined in "em.c" */ -#define put16(x) (put8((int) x), put8((int) (x >> 8))) -#define put32(x) (put16((int) x), put16((int) (x >> 16))) -#define put_cend() put8(sp_cend) -#define put_op(x) put8(x) -#define put_ps(x) put8(x) - -/* user interface */ -#define C_magic() put16(sp_magic) /* EM magic word */ - -#ifndef PROC_INTF -#include "writeem.h" -#endif PROC_INTF diff --git a/lang/cem/cemcom/em_lint.h b/lang/cem/cemcom/em_lint.h deleted file mode 100644 index 470c59224..000000000 --- a/lang/cem/cemcom/em_lint.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * (c) copyright 1990 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -/* - * This file can be considered the em_code.h file of lint. - * Those code generating functions that are used by cem and that have not - * been defined away by #ifdef LINT, are defined away here. Note that this a - * fairly random collection. E.g. it does not include C_open(), since the - * standard C-open() C_close() sequence is protected by #ifdef LINT, but it - * does include C_close() since the latter is also called in other places, - * to terminate the compilation process. - */ - -#define C_asp(c) -#define C_bra(b) -#define C_cal(p) -#define C_csa(w) -#define C_csb(w) -#define C_fil_dlb(g,o) -#define C_lae_dlb(g,o) -#define C_lal(c) -#define C_lin(c) -#define C_loi(c) -#define C_lol(c) -#define C_sdl(c) -#define C_sti(c) -#define C_stl(c) - -#define C_busy() 0 -#define C_close() - -#define C_df_dlb(l) -#define C_df_dnam(s) -#define C_df_ilb(l) - -#define C_pro_narg(s) -#define C_end(l) - -#define C_exa_dnam(s) -#define C_ina_dnam(s) -#define C_ina_dlb(l) -#define C_exp(s) -#define C_inp(s) - -#define C_bss_cst(n,w,i) - -#define C_con_cst(v) -#define C_con_icon(v,s) -#define C_con_ucon(v,s) -#define C_con_fcon(v,s) -#define C_con_scon(v,s) -#define C_con_dnam(v,s) -#define C_con_dlb(v,s) -#define C_con_pnam(v) - -#define C_rom_cst(v) -#define C_rom_scon(v,s) -#define C_rom_ilb(v) - -#define C_ldl(l) - -#define C_mes_begin(ms) -#define C_mes_end() - -#define C_ms_gto() -#define C_ms_par(b) -#define C_ms_reg(o,s,t,c) - diff --git a/lang/cem/cemcom/emcode.def b/lang/cem/cemcom/emcode.def deleted file mode 100644 index 0e27dcc5f..000000000 --- a/lang/cem/cemcom/emcode.def +++ /dev/null @@ -1,136 +0,0 @@ -% emcode definitions for the CEM compiler -- intermediate code -C_adf(p) | arith p; | OP(op_adf), CST(p) -C_adi(p) | arith p; | OP(op_adi), CST(p) -C_adp(p) | arith p; | OP(op_adp), CST(p) -C_ads(p) | arith p; | OP(op_ads), CST(p) -C_adu(p) | arith p; | OP(op_adu), CST(p) -C_and(p) | arith p; | OP(op_and), CST(p) -C_asp(p) | arith p; | OP(op_asp), CST(p) -C_bra(l) | label l; | OP(op_bra), CST((arith)l) -C_cai() | | OP(op_cai) -C_cal(p) | char *p; | OP(op_cal), PNAM(p) -C_cff() | | OP(op_cff) -C_cfi() | | OP(op_cfi) -C_cfu() | | OP(op_cfu) -C_cif() | | OP(op_cif) -C_cii() | | OP(op_cii) -C_ciu() | | OP(op_ciu) -C_cmf(p) | arith p; | OP(op_cmf), CST(p) -C_cmi(p) | arith p; | OP(op_cmi), CST(p) -C_cmp() | | OP(op_cmp) -C_cmu(p) | arith p; | OP(op_cmu), CST(p) -C_com(p) | arith p; | OP(op_com), CST(p) -C_csa(p) | arith p; | OP(op_csa), CST(p) -C_csb(p) | arith p; | OP(op_csb), CST(p) -C_cuf() | | OP(op_cuf) -C_cui() | | OP(op_cui) -C_cuu() | | OP(op_cuu) -C_dup(p) | arith p; | OP(op_dup), CST(p) -C_dvf(p) | arith p; | OP(op_dvf), CST(p) -C_dvi(p) | arith p; | OP(op_dvi), CST(p) -C_dvu(p) | arith p; | OP(op_dvu), CST(p) -C_fil_dlb(l, o) | label l; arith o; | OP(op_fil), DOFF(l, o) -C_ior(p) | arith p; | OP(op_ior), CST(p) -C_lae_dnam(p, o) | char *p; arith o; | OP(op_lae), NOFF(p, o) -C_lae_dlb(l, o) | label l; arith o; | OP(op_lae), DOFF(l, o) -C_lal(p) | arith p; | OP(op_lal), CST(p) -C_ldc(p) | arith p; | OP(op_ldc), DCST(p) -C_lde_dnam(p, o) | char *p; arith o; | OP(op_lde), NOFF(p, o) -C_lde_dlb(l, o) | label l; arith o; | OP(op_lde), DOFF(l, o) -C_ldl(p) | arith p; | OP(op_ldl), CST(p) -C_lfr(p) | arith p; | OP(op_lfr), CST(p) -C_lin(p) | arith p; | OP(op_lin), CST(p) -C_loc(p) | arith p; | OP(op_loc), CST(p) -C_loe_dnam(p, o) | char *p; arith o; | OP(op_loe), NOFF(p, o) -C_loe_dlb(l, o) | label l; arith o; | OP(op_loe), DOFF(l, o) -C_loi(p) | arith p; | OP(op_loi), CST(p) -C_lol(p) | arith p; | OP(op_lol), CST(p) -C_lor(p) | arith p; | OP(op_lor), CST(p) -C_lpi(p) | char *p; | OP(op_lpi), PNAM(p) -C_mlf(p) | arith p; | OP(op_mlf), CST(p) -C_mli(p) | arith p; | OP(op_mli), CST(p) -C_mlu(p) | arith p; | OP(op_mlu), CST(p) -C_ngf(p) | arith p; | OP(op_ngf), CST(p) -C_ngi(p) | arith p; | OP(op_ngi), CST(p) -C_ret(p) | arith p; | OP(op_ret), CST(p) -C_rmi(p) | arith p; | OP(op_rmi), CST(p) -C_rmu(p) | arith p; | OP(op_rmu), CST(p) -C_sbf(p) | arith p; | OP(op_sbf), CST(p) -C_sbi(p) | arith p; | OP(op_sbi), CST(p) -C_sbs(p) | arith p; | OP(op_sbs), CST(p) -C_sbu(p) | arith p; | OP(op_sbu), CST(p) -C_sde_dnam(p, o) | char *p; arith o; | OP(op_sde), NOFF(p, o) -C_sde_dlb(l, o) | label l; arith o; | OP(op_sde), DOFF(l, o) -C_sdl(p) | arith p; | OP(op_sdl), CST(p) -C_sli(p) | arith p; | OP(op_sli), CST(p) -C_slu(p) | arith p; | OP(op_slu), CST(p) -C_sri(p) | arith p; | OP(op_sri), CST(p) -C_sru(p) | arith p; | OP(op_sru), CST(p) -C_ste_dnam(p, o) | char *p; arith o; | OP(op_ste), NOFF(p, o) -C_ste_dlb(l, o) | label l; arith o; | OP(op_ste), DOFF(l, o) -C_sti(p) | arith p; | OP(op_sti), CST(p) -C_stl(p) | arith p; | OP(op_stl), CST(p) -C_xor(p) | arith p; | OP(op_xor), CST(p) -C_zeq(l) | label l; | OP(op_zeq), CST((arith)l) -C_zge(l) | label l; | OP(op_zge), CST((arith)l) -C_zgt(l) | label l; | OP(op_zgt), CST((arith)l) -C_zle(l) | label l; | OP(op_zle), CST((arith)l) -C_zlt(l) | label l; | OP(op_zlt), CST((arith)l) -C_zne(l) | label l; | OP(op_zne), CST((arith)l) -% -C_df_dlb(l) | label l; | DLB(l) -C_df_dnam(s) | char *s; | DNAM(s) -C_df_ilb(l) | label l; | ILB(l) -% -C_bss_cst(n, w, i) | arith n, w; int i; | - PS(ps_bss), DCST(n), CST(w), CST((arith)i) -% -C_con_icon(val, siz) | char *val; arith siz; | - PS(ps_con), WCON(sp_icon, val, siz), CEND() -C_con_ucon(val, siz) | char *val; arith siz; | - PS(ps_con), WCON(sp_ucon, val, siz), CEND() -C_con_fcon(val, siz) | char *val; arith siz; | - PS(ps_con), WCON(sp_fcon, val, siz), CEND() -C_con_scon(str, siz) | char *str; arith siz; | PS(ps_con), CSTR(str), CEND() -C_con_dnam(str, val) | char *str; arith val; | - PS(ps_con), NOFF(str, val), CEND() -C_con_dlb(l, val) | label l; arith val; | - PS(ps_con), DOFF(l, val), CEND() -C_con_pnam(str) | char *str; | PS(ps_con), PNAM(str), CEND() -% -C_rom_cst(l) | arith l; | PS(ps_rom), CST(l), CEND() -C_rom_icon(val, siz) | char *val; arith siz; | - PS(ps_rom), WCON(sp_icon, val, siz), CEND() -C_rom_fcon(val, siz) | char *val; arith siz; | - PS(ps_rom), WCON(sp_fcon, val, siz), CEND() -C_rom_ilb(l) | label l; | PS(ps_rom), ILB(l), CEND() -% -C_cst(l) | arith l; | CST(l) -C_icon(val, siz) | char *val; arith siz; | WCON(sp_icon, val, siz) -C_ucon(val, siz) | char *val; arith siz; | WCON(sp_ucon, val, siz) -C_fcon(val, siz) | char *val; arith siz; | WCON(sp_fcon, val, siz) -C_scon(str, siz) | char *str; arith siz; | CSTR(str) -C_dnam(str, val) | char *str; arith val; | NOFF(str, val) -C_dlb(l, val) | label l; arith val; | DOFF(l, val) -C_pnam(str) | char *str; | PNAM(str) -C_ilb(l) | label l; | ILB(l) -% -C_pro_narg(p1) | char *p1; | PS(ps_pro), PNAM(p1), CEND() -C_end(l) | arith l; | PS(ps_end), CST(l) -% -C_exa(s) | char *s; | PS(ps_exa), DNAM(s) -C_exp(s) | char *s; | PS(ps_exp), PNAM(s) -C_ina_pt(l) | label l; | PS(ps_ina), DLB(l) -C_ina(s) | char *s; | PS(ps_ina), DNAM(s) -C_inp(s) | char *s; | PS(ps_inp), PNAM(s) -% -C_ms_err() | | PS(ps_mes), CST((arith)ms_err), CEND() -C_ms_emx(p1, p2) | arith p1, p2; | - PS(ps_mes), CST((arith)ms_emx), CST(p1), CST(p2), CEND() -C_ms_reg(a, b, c, d) | arith a, b; int c, d; | - PS(ps_mes), CST((arith)ms_reg), CST(a), CST(b), CST((arith)c), CST((arith)d), CEND() -C_ms_src(l, s) | arith l; char *s; | - PS(ps_mes), CST((arith)ms_src), CST(l), CSTR(s), CEND() -C_ms_flt() | | PS(ps_mes), CST((arith)ms_flt), CEND() -C_ms_par(l) | arith l; | PS(ps_mes), CST((arith)ms_par), CST(l), CEND() -C_ms_gto() | | PS(ps_mes), CST((arith)ms_gto), CEND() diff --git a/lang/cem/cemcom/expr.h b/lang/cem/cemcom/expr.h deleted file mode 100644 index 46e658a05..000000000 --- a/lang/cem/cemcom/expr.h +++ /dev/null @@ -1,102 +0,0 @@ -/* $Header$ */ -/* EXPRESSION DESCRIPTOR */ - -/* What we want to define is the struct expr, but since it contains - a union of various goodies, we define them first; so be patient. -*/ - -struct value { - struct idf *vl_idf; /* idf of an external name or 0 */ - arith vl_value; /* constant, or offset if idf != 0 */ -}; - -struct string { - char *sg_value; /* string of characters repr. the constant */ - label sg_datlab; /* global data-label */ -}; - -struct floating { - char *fl_value; /* pointer to string repr. the fp const. */ - label fl_datlab; /* global data_label */ -}; - -struct oper { - struct type *op_type; /* resulting type of the operation */ - struct expr *op_left; - int op_oper; /* the symbol of the operator */ - struct expr *op_right; -}; - -/* The following constants indicate the class of the expression: */ -#define Value 0 /* it is a value known at load time */ -#define String 1 /* it is a string constant */ -#define Float 2 /* it is a floating point constant */ -#define Oper 3 /* it is a run-time expression */ -#define Type 4 /* only its type is relevant */ - -struct expr { - struct expr *next; - char *ex_file; /* the file it (probably) comes from */ - unsigned int ex_line; /* the line it (probably) comes from */ - struct type *ex_type; - char ex_lvalue; - char ex_flags; - int ex_class; - int ex_depth; - union { - struct value ex_value; - struct string ex_string; - struct floating ex_float; - struct oper ex_oper; - } ex_object; -}; - -/* some abbreviated selections */ -#define VL_VALUE ex_object.ex_value.vl_value -#define VL_IDF ex_object.ex_value.vl_idf -#define SG_VALUE ex_object.ex_string.sg_value -#define SG_DATLAB ex_object.ex_string.sg_datlab -#define FL_VALUE ex_object.ex_float.fl_value -#define FL_DATLAB ex_object.ex_float.fl_datlab -#define OP_TYPE ex_object.ex_oper.op_type -#define OP_LEFT ex_object.ex_oper.op_left -#define OP_OPER ex_object.ex_oper.op_oper -#define OP_RIGHT ex_object.ex_oper.op_right - -#define EXPRTYPE(e) ((e)->ex_type->tp_fund) - -/* An expression is a `load-time constant' if it is of the form - +/- or ; - it is a `compile-time constant' if it is an . -*/ -#define is_ld_cst(e) ((e)->ex_lvalue == 0 && (e)->ex_class == Value) -#define is_cp_cst(e) (is_ld_cst(e) && (e)->VL_IDF == 0) - -/* a floating constant expression ? -*/ -#define is_fp_cst(e) ((e)->ex_class == Float) - -/* some bits for the ex_flag field, to keep track of various - interesting properties of an expression. -*/ -#define EX_SIZEOF 001 /* contains sizeof operator */ -#define EX_CAST 002 /* contains cast */ -#define EX_LOGICAL 004 /* contains logical operator */ -#define EX_COMMA 010 /* contains expression comma */ -#define EX_PARENS 020 /* the top level is parenthesized */ - -#define NILEXPR ((struct expr *)0) - -extern struct expr *intexpr(), *new_oper(); - - -/* allocation definitions of struct expr */ -/* ALLOCDEF "expr" */ -extern char *st_alloc(); -extern struct expr *h_expr; -#define new_expr() ((struct expr *) \ - st_alloc((char **)&h_expr, sizeof(struct expr))) -#define free_expr(p) st_free(p, h_expr, sizeof(struct expr)) - - -#define ISCOMMA(e) ((e)->ex_class == Oper && (e)->OP_OPER == INITCOMMA) diff --git a/lang/cem/cemcom/faulty.h b/lang/cem/cemcom/faulty.h deleted file mode 100644 index 9b3b13d75..000000000 --- a/lang/cem/cemcom/faulty.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* FAULTY DEFINITIONS */ - -#define faulty(tp) ((tp)_faulty(__FILE__, __LINE__)) -#define fault() (_faulty(__FILE__, __LINE__)) diff --git a/lang/cem/cemcom/field.h b/lang/cem/cemcom/field.h deleted file mode 100644 index 794920b66..000000000 --- a/lang/cem/cemcom/field.h +++ /dev/null @@ -1,20 +0,0 @@ -/* $Header$ */ -/* FIELD DESCRIPTOR */ - -struct field { /* for field specifiers */ - struct field *next; - arith fd_mask; - int fd_shift; - int fd_width; - struct sdef *fd_sdef; /* upward pointer */ -}; - - -/* allocation definitions of struct field */ -/* ALLOCDEF "field" */ -extern char *st_alloc(); -extern struct field *h_field; -#define new_field() ((struct field *) \ - st_alloc((char **)&h_field, sizeof(struct field))) -#define free_field(p) st_free(p, h_field, sizeof(struct field)) - diff --git a/lang/cem/cemcom/idf.h b/lang/cem/cemcom/idf.h deleted file mode 100644 index 12496de18..000000000 --- a/lang/cem/cemcom/idf.h +++ /dev/null @@ -1,68 +0,0 @@ -/* $Header$ */ -/* IDENTIFIER DESCRIPTOR */ - -#include "nopp.h" - -/* Since the % operation in the calculation of the hash function - turns out to be expensive, it is replaced by the cheaper XOR (^). - Each character of the identifier is xored with an 8-bit mask which - depends on the position of the character; the sum of these results - is the hash value. The random masks are obtained from a - congruence generator in idf.c. -*/ - -#define HASHSIZE 256 /* must be a power of 2 */ -#define HASH_X 0253 /* Knuth's X */ -#define HASH_A 77 /* Knuth's a */ -#define HASH_C 153 /* Knuth's c */ - -extern char hmask[]; /* the random masks */ -#define HASHMASK (HASHSIZE-1) /* since it is a power of 2 */ -#define STARTHASH() (0) -#define ENHASH(hs,ch,ps) (hs + (ch ^ hmask[ps])) -#define STOPHASH(hs) (hs & HASHMASK) - -struct idstack_item { /* stack of identifiers */ - struct idstack_item *next; - struct idf *is_idf; -}; - - -/* allocation definitions of struct idstack_item */ -/* ALLOCDEF "idstack_item" */ -extern char *st_alloc(); -extern struct idstack_item *h_idstack_item; -#define new_idstack_item() ((struct idstack_item *) \ - st_alloc((char **)&h_idstack_item, sizeof(struct idstack_item))) -#define free_idstack_item(p) st_free(p, h_idstack_item, sizeof(struct idstack_item)) - - -struct idf { - struct idf *next; - char *id_text; -#ifndef NOPP - struct macro *id_macro; - int id_resmac; /* if nonzero: keyword of macroproc. */ -#endif NOPP - int id_reserved; /* non-zero for reserved words */ - struct def *id_def; /* variables, typedefs, enum-constants */ - struct sdef *id_sdef; /* selector tags */ - struct tag *id_struct; /* struct and union tags */ - struct tag *id_enum; /* enum tags */ - int id_special; /* special action needed at occurrence */ -}; - - -/* allocation definitions of struct idf */ -/* ALLOCDEF "idf" */ -extern char *st_alloc(); -extern struct idf *h_idf; -#define new_idf() ((struct idf *) \ - st_alloc((char **)&h_idf, sizeof(struct idf))) -#define free_idf(p) st_free(p, h_idf, sizeof(struct idf)) - - -extern struct idf *str2idf(), *idf_hashed(); - -extern int level; -extern struct idf *gen_idf(); diff --git a/lang/cem/cemcom/ival.c b/lang/cem/cemcom/ival.c deleted file mode 100644 index b439afeca..000000000 --- a/lang/cem/cemcom/ival.c +++ /dev/null @@ -1,624 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* CODE FOR THE INITIALISATION OF GLOBAL VARIABLES */ - -#include "nofloat.h" -#include -#include "debug.h" -#include -#include "nobitfield.h" -#include "arith.h" -#include "align.h" -#include "label.h" -#include "expr.h" -#include "type.h" -#include "struct.h" -#include "field.h" -#include "assert.h" -#include "Lpars.h" -#include "class.h" -#include "sizes.h" -#include "idf.h" -#include "level.h" -#include "def.h" - -#define con_nullbyte() C_con_ucon("0", (arith)1) - -char *symbol2str(); -char *long2str(); -char *strncpy(); -struct expr *do_array(), *do_struct(), *IVAL(); -extern char options[]; - -/* do_ival() performs the initialisation of a global variable - of type tp with the initialisation expression expr by calling IVAL(). - Guided by type tp, the expression is evaluated. -*/ -do_ival(tpp, ex) - struct type **tpp; - struct expr *ex; -{ - if (IVAL(tpp, ex) != 0) - too_many_initialisers(ex); -} - -/* IVAL() recursively guides the initialisation expression through the - different routines for the different types of initialisation: - - array initialisation - - struct initialisation - - fundamental type initialisation - Upto now, the initialisation of a union is not allowed! - An initialisation expression tree consists of normal expressions - which can be joined together by ',' nodes, which operator acts - like the lisp function "cons" to build lists. - IVAL() returns a pointer to the remaining expression tree. -*/ -struct expr * -IVAL(tpp, ex) - struct type **tpp; /* type of global variable */ - register struct expr *ex; /* initialiser expression */ -{ - register struct type *tp = *tpp; - - switch (tp->tp_fund) { - case ARRAY: /* array initialisation */ - if (valid_type(tp->tp_up, "array element") == 0) - return 0; - if (ISCOMMA(ex)) /* list of initialisation expressions */ - return do_array(ex, tpp); - if (tp->tp_up->tp_fund == CHAR && ex->ex_class == String) - /* initialisation like char s[] = "I am a string" */ - ch_array(tpp, ex); - else /* " int i[24] = 12;" */ - check_and_pad(ex, tpp); - break; - case STRUCT: /* struct initialisation */ - if (valid_type(tp, "struct") == 0) - return 0; - if (ISCOMMA(ex)) /* list of initialisation expressions */ - return do_struct(ex, tp); - check_and_pad(ex, tpp); /* "struct foo f = 12;" */ - break; - case UNION: - error("union initialisation not allowed"); - break; - case ERRONEOUS: - break; - default: /* fundamental type */ - if (ISCOMMA(ex)) { /* " int i = {12};" */ - if (IVAL(tpp, ex->OP_LEFT) != 0) - too_many_initialisers(ex); - /* return remainings of the list for the - other members of the aggregate, if this - item belongs to an aggregate. - */ - return ex->OP_RIGHT; - } - check_ival(ex, tp); /* "int i = 12;" */ - break; - } - return 0; -} - -/* do_array() initialises the members of an array described - by type tp with the expressions in expr. - Two important cases: - - the number of members is known - - the number of members is not known - In the latter case, do_array() digests the whole expression - tree it is given. - In the former case, do_array() eats as many members from - the expression tree as are needed for the array. - If there are not sufficient members for the array, the remaining - members are padded with zeroes -*/ -struct expr * -do_array(ex, tpp) - register struct expr *ex; - struct type **tpp; -{ - register struct type *tp = *tpp; - register arith elem_count; - - ASSERT(tp->tp_fund == ARRAY && ISCOMMA(ex)); - /* the following test catches initialisations like - char c[] = {"just a string"}; - or - char d[] = {{"just another string"}}; - The use of the brackets causes this problem. - Note: although the implementation of such initialisations - is completely foolish, we did it!! (no applause, thank you) - */ - if (tp->tp_up->tp_fund == CHAR) { - register struct expr *f = ex->OP_LEFT, *g = NILEXPR; - - while (ISCOMMA(f)) { /* eat the brackets!!! */ - g = f; - f = f->OP_LEFT; - } - if (f->ex_class == String) { /* hallelujah, it's a string! */ - ch_array(tpp, f); - return g ? g->OP_RIGHT : ex->OP_RIGHT; - } - /* else: just go on with the next part of this function */ - if (g != 0) - ex = g; - } - if (tp->tp_size == (arith)-1) { - /* declared with unknown size: [] */ - for (elem_count = 0; ex; elem_count++) { - /* eat whole initialisation expression */ - if (ISCOMMA(ex->OP_LEFT)) { /* embraced member */ - if (IVAL(&(tp->tp_up), ex->OP_LEFT) != 0) - too_many_initialisers(ex); - ex = ex->OP_RIGHT; - } - else { - if (aggregate_type(tp->tp_up)) - ex = IVAL(&(tp->tp_up), ex); - else { - check_ival(ex->OP_LEFT, tp->tp_up); - ex = ex->OP_RIGHT; - } - } - } - /* set the proper size */ - *tpp = construct_type(ARRAY, tp->tp_up, elem_count); - } - else { /* the number of members is already known */ - arith dim = tp->tp_size / tp->tp_up->tp_size; - - for (elem_count = 0; elem_count < dim && ex; elem_count++) { - if (ISCOMMA(ex->OP_LEFT)) { /* embraced member */ - if (IVAL(&(tp->tp_up), ex->OP_LEFT) != 0) - too_many_initialisers(ex); - ex = ex->OP_RIGHT; - } - else { - if (aggregate_type(tp->tp_up)) - ex = IVAL(&(tp->tp_up), ex); - else { - check_ival(ex->OP_LEFT, tp->tp_up); - ex = ex->OP_RIGHT; - } - } - } - if (ex && elem_count == dim) - /* all the members are initialised but there - remains a part of the expression tree which - is returned - */ - return ex; - if ((ex == 0) && elem_count < dim) - /* the expression tree is completely absorbed - but there are still members which must be - initialised with zeroes - */ - do - pad(tp->tp_up); - while (++elem_count < dim); - } - return 0; -} - - -/* do_struct() initialises a struct of type tp with the expression expr. - The main loop is just controlled by the definition of the selectors - during which alignment is taken care of. -*/ -struct expr * -do_struct(ex, tp) - register struct expr *ex; - register struct type *tp; -{ - register struct sdef *sd = tp->tp_sdef; - arith bytes_upto_here = (arith)0; - arith last_offset = (arith)-1; - - ASSERT(tp->tp_fund == STRUCT && ISCOMMA(ex)); - /* as long as there are selectors and there is an initialiser.. */ - while (sd && ex) { - if (ISCOMMA(ex->OP_LEFT)) { /* embraced expression */ - if (IVAL(&(sd->sd_type), ex->OP_LEFT) != 0) - too_many_initialisers(ex); - ex = ex->OP_RIGHT; - } - else { - if (aggregate_type(sd->sd_type)) - /* selector is an aggregate itself */ - ex = IVAL(&(sd->sd_type), ex); - else { -#ifdef NOBITFIELD - /* fundamental type, not embraced */ - check_ival(ex->OP_LEFT, sd->sd_type); - ex = ex->OP_RIGHT; -#else - if (is_anon_idf(sd->sd_idf)) - /* a hole in the struct due to - the use of ";:n;" in a struct - definition. - */ - put_bf(sd->sd_type, (arith)0); - else { /* fundamental type, not embraced */ - check_ival(ex->OP_LEFT, sd->sd_type); - ex = ex->OP_RIGHT; - } -#endif NOBITFIELD - } - } - if (sd->sd_sdef) /* align upto the next selector boundary */ - bytes_upto_here += zero_bytes(sd); - if (last_offset != sd->sd_offset) { - /* don't take the field-width more than once */ - bytes_upto_here += - size_of_type(sd->sd_type, "selector"); - last_offset = sd->sd_offset; - } - sd = sd->sd_sdef; - } - /* perfect fit if (ex && (sd == 0)) holds */ - if ((ex == 0) && (sd != 0)) { - /* there are selectors left which must be padded with zeroes */ - do { - pad(sd->sd_type); - /* take care of the alignment restrictions */ - if (sd->sd_sdef) - bytes_upto_here += zero_bytes(sd); - /* no field thrown-outs here */ - bytes_upto_here += - size_of_type(sd->sd_type, "selector"); - } while (sd = sd->sd_sdef); - } - /* keep on aligning... */ - while (bytes_upto_here++ < tp->tp_size) - con_nullbyte(); - return ex; -} - -/* check_and_pad() is given a simple initialisation expression - where the type can be either a simple or an aggregate type. - In the latter case, only the first member is initialised and - the rest is zeroed. -*/ -check_and_pad(ex, tpp) - register struct expr *ex; - struct type **tpp; -{ - /* ex is of a fundamental type */ - register struct type *tp = *tpp; - - if (tp->tp_fund == ARRAY) { - if (valid_type(tp->tp_up, "array element") == 0) - return; - check_and_pad(ex, &(tp->tp_up)); /* first member */ - if (tp->tp_size == (arith)-1) - /* no size specified upto here: just - set it to the size of one member. - */ - tp = *tpp = construct_type(ARRAY, tp->tp_up, (arith)1); - else { - register int dim = tp->tp_size / tp->tp_up->tp_size; - /* pad remaining members with zeroes */ - while (--dim > 0) - pad(tp->tp_up); - } - } - else - if (tp->tp_fund == STRUCT) { - register struct sdef *sd = tp->tp_sdef; - - if (valid_type(tp, "struct") == 0) - return; - check_and_pad(ex, &(sd->sd_type)); - /* next selector is aligned by adding extra zeroes */ - if (sd->sd_sdef) - zero_bytes(sd); - while (sd = sd->sd_sdef) { /* pad remaining selectors */ - pad(sd->sd_type); - if (sd->sd_sdef) - zero_bytes(sd); - } - } - else /* simple type */ - check_ival(ex, tp); -} - -/* pad() fills an element of type tp with zeroes. - If the element is an aggregate, pad() is called recursively. -*/ -pad(tp) - register struct type *tp; -{ - register arith sz = tp->tp_size; - - switch (tp->tp_fund) { - case ARRAY: - if (valid_type(tp->tp_up, "array element") == 0) - return; - break; - case STRUCT: - if (valid_type(tp, "struct") == 0) - return; - break; - case UNION: - if (valid_type(tp, "union") == 0) - return; - if (options['R']) { - warning("initialisation of unions not allowed"); - } - break; -#ifndef NOBITFIELD - case FIELD: - put_bf(tp, (arith)0); - return; -#endif NOBITFIELD - case ERRONEOUS: - return; - } - - while (sz >= word_size) { - C_con_cst((arith) 0); - sz -= word_size; - } - while (sz) { - C_con_icon("0", (arith) 1); - sz--; - } -} - -/* check_ival() checks whether the initialisation of an element - of a fundamental type is legal and, if so, performs the initialisation - by directly generating the necessary code. - No further comment is needed to explain the internal structure - of this straightforward function. -*/ -check_ival(expr, tp) - register struct expr *expr; - register struct type *tp; -{ - /* The philosophy here is that ch7cast puts an explicit - conversion node in front of the expression if the types - are not compatible. In this case, the initialisation - expression is no longer a constant. - */ - struct expr *ex = expr; - - switch (tp->tp_fund) { - case CHAR: - case SHORT: - case INT: - case LONG: - case ENUM: - case POINTER: - ch7cast(&ex, '=', tp); - expr = ex; -#ifdef DEBUG - print_expr("init-expr after cast", expr); -#endif DEBUG - if (!is_ld_cst(expr)) - illegal_init_cst(expr); - else - if (expr->VL_CLASS == Const) - con_int(expr); - else - if (expr->VL_CLASS == Name) { - register struct idf *idf = expr->VL_IDF; - - if (idf->id_def->df_level >= L_LOCAL) - illegal_init_cst(expr); - else /* e.g., int f(); int p = f; */ - if (idf->id_def->df_type->tp_fund == FUNCTION) - C_con_pnam(idf->id_text); - else /* e.g., int a; int *p = &a; */ - C_con_dnam(idf->id_text, expr->VL_VALUE); - } - else { - ASSERT(expr->VL_CLASS == Label); - C_con_dlb(expr->VL_LBL, expr->VL_VALUE); - } - break; -#ifndef NOFLOAT - case FLOAT: - case DOUBLE: - ch7cast(&ex, '=', tp); - expr = ex; -#ifdef DEBUG - print_expr("init-expr after cast", expr); -#endif DEBUG - if (expr->ex_class == Float) - C_con_fcon(expr->FL_VALUE, expr->ex_type->tp_size); - else - if (expr->ex_class == Oper && expr->OP_OPER == INT2FLOAT) { - /* float f = 1; */ - expr = expr->OP_RIGHT; - if (is_cp_cst(expr)) - C_con_fcon(long2str((long)expr->VL_VALUE, 10), - tp->tp_size); - else - illegal_init_cst(expr); - } - else - illegal_init_cst(expr); - break; -#endif NOFLOAT - -#ifndef NOBITFIELD - case FIELD: - ch7cast(&ex, '=', tp->tp_up); - expr = ex; -#ifdef DEBUG - print_expr("init-expr after cast", expr); -#endif DEBUG - if (is_cp_cst(expr)) - put_bf(tp, expr->VL_VALUE); - else - illegal_init_cst(expr); - break; -#endif NOBITFIELD - - case ERRONEOUS: - break; - default: - crash("check_ival"); - } -} - -/* ch_array() initialises an array of characters when given - a string constant. - Alignment is taken care of. -*/ -ch_array(tpp, ex) - struct type **tpp; /* type tp = array of characters */ - struct expr *ex; -{ - register struct type *tp = *tpp; - register arith length = ex->SG_LEN; - char *s; - arith ntopad; - - ASSERT(ex->ex_class == String); - if (tp->tp_size == (arith)-1) { - /* set the dimension */ - tp = *tpp = construct_type(ARRAY, tp->tp_up, length); - ntopad = align(tp->tp_size, word_size) - tp->tp_size; - } - else { - arith dim = tp->tp_size / tp->tp_up->tp_size; - extern char options[]; - - if (length > dim) { - if (options['R']) - too_many_initialisers(ex); - else { /* don't take the null byte into account */ - if (length > dim + 1) - expr_warning(ex, - "too many initialisers"); - length = dim; - } - } - ntopad = align(dim, word_size) - length; - } - /* throw out the characters of the already prepared string */ - s = Malloc((unsigned) (length + ntopad)); - clear(s, (int) (length + ntopad)); - strncpy(s, ex->SG_VALUE, (int) length); - free(ex->SG_VALUE); - str_cst(s, (int) (length + ntopad)); - free(s); -} - -/* As long as some parts of the pipeline cannot handle very long string - constants, string constants are written out in chunks -*/ -str_cst(str, len) - register char *str; - register int len; -{ - arith chunksize = ((127 + word_size) / word_size) * word_size; - - while (len > chunksize) { - C_con_scon(str, chunksize); - len -= chunksize; - str += chunksize; - } - C_con_scon(str, (arith) len); -} - -#ifndef NOBITFIELD -/* put_bf() takes care of the initialisation of (bit-)field - selectors of a struct: each time such an initialisation takes place, - put_bf() is called instead of the normal code generating routines. - Put_bf() stores the given integral value into "field" and - "throws" the result of "field" out if the current selector - is the last of this number of fields stored at the same address. -*/ -put_bf(tp, val) - struct type *tp; - arith val; -{ - static long field = (arith)0; - static arith offset = (arith)-1; - register struct field *fd = tp->tp_field; - register struct sdef *sd = fd->fd_sdef; - static struct expr exp; - - ASSERT(sd); - if (offset == (arith)-1) { - /* first bitfield in this field */ - offset = sd->sd_offset; - exp.ex_type = tp->tp_up; - exp.ex_class = Value; - exp.VL_CLASS = Const; - } - if (val != 0) /* insert the value into "field" */ - field |= (val & fd->fd_mask) << fd->fd_shift; - if (sd->sd_sdef == 0 || sd->sd_sdef->sd_offset != offset) { - /* the selector was the last stored at this address */ - exp.VL_VALUE = field; - con_int(&exp); - field = (arith)0; - offset = (arith)-1; - } -} -#endif NOBITFIELD - -int -zero_bytes(sd) - register struct sdef *sd; -{ - /* fills the space between a selector of a struct - and the next selector of that struct with zero-bytes. - */ - register int n = sd->sd_sdef->sd_offset - sd->sd_offset - - size_of_type(sd->sd_type, "struct member"); - register int count = n; - - while (n-- > 0) - con_nullbyte(); - return count; -} - -int -valid_type(tp, str) - struct type *tp; - char *str; -{ - if (tp->tp_size < 0) { - error("size of %s unknown", str); - return 0; - } - return 1; -} - -con_int(ex) - register struct expr *ex; -{ - register struct type *tp = ex->ex_type; - - ASSERT(is_cp_cst(ex)); - if (tp->tp_unsigned) - C_con_ucon(long2str((long)ex->VL_VALUE, -10), tp->tp_size); - else - C_con_icon(long2str((long)ex->VL_VALUE, 10), tp->tp_size); -} - -illegal_init_cst(ex) - struct expr *ex; -{ - expr_error(ex, "illegal initialisation constant"); -} - -too_many_initialisers(ex) - struct expr *ex; -{ - expr_error(ex, "too many initialisers"); -} - -aggregate_type(tp) - register struct type *tp; -{ - return tp->tp_fund == ARRAY || tp->tp_fund == STRUCT; -} diff --git a/lang/cem/cemcom/l_dummy.c b/lang/cem/cemcom/l_dummy.c deleted file mode 100644 index 9e524ee86..000000000 --- a/lang/cem/cemcom/l_dummy.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -/* - *The following functions are hacked to null-functions (i.e. they - * do nothing). This needs another solution in the future. !!???!! - */ -#include "lint.h" - -#ifdef LINT - -#include "arith.h" -#include "label.h" - -C_close(){} -int C_busy(){return 0;} - - -/* More routines */ -/* ARGSUSED */ -CC_bhcst(ps_xxx,n,w,i) arith n,w; {} -/* ARGSUSED */ -CC_crcst(ps_xxx,v) arith v; {} -/* ARGSUSED */ -CC_crdlb(ps_xxx,v,s) label v; arith s; {} -/* ARGSUSED */ -CC_crdnam(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_crxcon(op,ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_crilb(ps_xxx,v) label v; {} -/* ARGSUSED */ -CC_crpnam(ps_xxx,v) char *v; {} -/* ARGSUSED */ -CC_crscon(ps_xxx,v,s) char *v; arith s; {} -/* ARGSUSED */ -CC_cst(l) {} -/* ARGSUSED */ -CC_dfdlb(l) label l; {} -/* ARGSUSED */ -CC_dfdnam(s) char *s; {} -/* ARGSUSED */ -CC_dfilb(l) label l; {} -/* ARGSUSED */ -CC_end(l) arith l; {} -CC_msend() {} -/* ARGSUSED */ -CC_msstart(ms) {} -/* ARGSUSED */ -CC_opcst(op_xxx,c) arith c; {} -/* ARGSUSED */ -CC_opdlb(op_xxx,g,o) label g; arith o; {} -/* ARGSUSED */ -CC_opilb(op_xxx,b) label b; {} -/* ARGSUSED */ -CC_oppnam(op_xxx,p) char *p; {} -/* ARGSUSED */ -CC_pronarg(s) char *s; {} -/* ARGSUSED */ -CC_psdlb(ps_xxx,l) label l; {} -/* ARGSUSED */ -CC_psdnam(ps_xxx,s) char *s; {} -/* ARGSUSED */ -CC_pspnam(ps_xxx,s) char *s; {} -/* ARGSUSED */ -CC_scon(v,s) char *s; {} -#endif LINT diff --git a/lang/cem/cemcom/macro.h b/lang/cem/cemcom/macro.h deleted file mode 100644 index cdd023f89..000000000 --- a/lang/cem/cemcom/macro.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Header$ */ -/* PREPROCESSOR: DEFINITION OF MACRO DESCRIPTOR */ - -#include "nopp.h" - -#ifndef NOPP -/* The flags of the mc_flag field of the macro structure. Note that - these flags can be set simultaneously. -*/ -#define NOFLAG 0 /* no special flags */ -#define FUNC 01 /* function attached */ -#define PREDEF 02 /* predefined macro */ - -#define FORMALP 0200 /* mask for creating macro formal parameter */ - -/* The macro descriptor is very simple, except the fact that the - mc_text, which points to the replacement text, contains the - non-ascii characters \201, \202, etc, indicating the position of a - formal parameter in this text. -*/ -struct macro { - struct macro *next; - char * mc_text; /* the replacement text */ - int mc_nps; /* number of formal parameters */ - int mc_length; /* length of replacement text */ - char mc_flag; /* marking this macro */ -}; - - -/* allocation definitions of struct macro */ -/* ALLOCDEF "macro" */ -extern char *st_alloc(); -extern struct macro *h_macro; -#define new_macro() ((struct macro *) \ - st_alloc((char **)&h_macro, sizeof(struct macro))) -#define free_macro(p) st_free(p, h_macro, sizeof(struct macro)) - - -/* `token' numbers of keywords of command-line processor -*/ -#define K_UNKNOWN 0 -#define K_DEFINE 1 -#define K_ELIF 2 -#define K_ELSE 3 -#define K_ENDIF 4 -#define K_IF 5 -#define K_IFDEF 6 -#define K_IFNDEF 7 -#define K_INCLUDE 8 -#define K_LINE 9 -#define K_UNDEF 10 -#endif NOPP diff --git a/lang/cem/cemcom/make.emfun b/lang/cem/cemcom/make.emfun deleted file mode 100755 index d3fe92f60..000000000 --- a/lang/cem/cemcom/make.emfun +++ /dev/null @@ -1,19 +0,0 @@ -ed - $1 <<'--EOI--' -g/^%/d -g/^ /.-1,.j -1,$s/^\([^|]*\)|\([^|]*\)|\(.*\)$/\ -\1 \2 {\ -\3;\ -}/ -1i -/* EM COMPACT CODE -- PROCEDURAL INTERFACE (generated from emcode.def) */ -#include "em.h" -#ifdef PROC_INTF -#include "label.h" -#include "arith.h" -. -$a -#endif PROC_INTF -. -1,$p ---EOI-- diff --git a/lang/cem/cemcom/make.emmac b/lang/cem/cemcom/make.emmac deleted file mode 100755 index 5337f40f8..000000000 --- a/lang/cem/cemcom/make.emmac +++ /dev/null @@ -1,10 +0,0 @@ -ed - $1 <<'--EOI--' -g/^%/d -g/^ /.-1,.j -1,$s/^\([^|]*\)|[^|]*|\(.*\)$/\ -#define \1 (\2)/ -1i -/* EM COMPACT CODE -- MACRO DEFINITIONS (generated from emcode.def) */ -. -1,$p ---EOI-- diff --git a/lang/cem/cemcom/nmclash.c b/lang/cem/cemcom/nmclash.c deleted file mode 100644 index e820442de..000000000 --- a/lang/cem/cemcom/nmclash.c +++ /dev/null @@ -1,9 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* Accepted if many characters of long names are significant */ -/* $Header$ */ -abcdefghijklmnopr() { } -abcdefghijklmnopq() { } -main() { } diff --git a/lang/cem/cemcom/stack.h b/lang/cem/cemcom/stack.h deleted file mode 100644 index 27a7f312f..000000000 --- a/lang/cem/cemcom/stack.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $Header$ */ -/* IDENTIFIER STACK DEFINITIONS */ - -/* The identifier stack is implemented as a stack of sets. - The stack is implemented by a doubly linked list, - the sets by singly linked lists. -*/ - -struct stack_level { - struct stack_level *next; - struct stack_level *sl_next; /* upward link */ - struct stack_level *sl_previous; /* downward link */ - struct stack_entry *sl_entry; /* sideward link */ - arith sl_local_offset; /* @ for first coming object */ - arith sl_max_block; /* maximum size of sub-block */ - int sl_level; -}; - - -/* allocation definitions of struct stack_level */ -/* ALLOCDEF "stack_level" */ -extern char *st_alloc(); -extern struct stack_level *h_stack_level; -#define new_stack_level() ((struct stack_level *) \ - st_alloc((char **)&h_stack_level, sizeof(struct stack_level))) -#define free_stack_level(p) st_free(p, h_stack_level, sizeof(struct stack_level)) - - -struct stack_entry { - struct stack_entry *next; - struct idf *se_idf; -}; - - -/* allocation definitions of struct stack_entry */ -/* ALLOCDEF "stack_entry" */ -extern char *st_alloc(); -extern struct stack_entry *h_stack_entry; -#define new_stack_entry() ((struct stack_entry *) \ - st_alloc((char **)&h_stack_entry, sizeof(struct stack_entry))) -#define free_stack_entry(p) st_free(p, h_stack_entry, sizeof(struct stack_entry)) - - -extern struct stack_level *local_level; -extern struct stack_level *stack_level_of(); -extern int level; diff --git a/lang/cem/cemcom/storage.c b/lang/cem/cemcom/storage.c deleted file mode 100644 index 1477f7123..000000000 --- a/lang/cem/cemcom/storage.c +++ /dev/null @@ -1,67 +0,0 @@ -/* $Header$ */ -/* S T R U C T U R E - S T O R A G E M A N A G E M E N T */ - -/* Assume that each structure contains a field "next", of pointer - type, as first tagfield. - struct xxx serves as a general structure: it just declares the - tagfield "next" as first field of a structure. - Please don't worry about any warnings when compiling this file - because some dirty tricks are performed to obtain the necessary - actions. -*/ - -#include "debug.h" /* UF */ -#include "botch_free.h" /* UF */ -#include "assert.h" -#include "alloc.h" -#include "storage.h" - -struct xxx { - char *next; -}; - -char * -head_alloc(phead, size) - char **phead; - int size; -{ - struct xxx *tmp; - - if (*phead == 0) { - return Malloc(size); - } - tmp = (struct xxx *) (*phead); - *phead = (char *) tmp->next; - return (char *) tmp; -} - -/* instead of Calloc: */ -clear(ptr, n) - char *ptr; - int n; -{ - ASSERT((long)ptr % sizeof (long) == 0); - while (n >= sizeof (long)) { /* high-speed clear loop */ - *(long *)ptr = 0L; - ptr += sizeof (long), n -= sizeof (long); - } - while (n--) - *ptr++ = '\0'; -} - -#ifdef BOTCH_FREE -botch(ptr, n) - char *ptr; - int n; -{ /* Writes garbage over n chars starting from ptr. - Used to check if freed memory is used inappropriately. - */ - ASSERT((long)ptr % sizeof (long) == 0); - while (n >= sizeof (long)) { /* high-speed botch loop */ - *(long *)ptr = 025252525252L; - ptr += sizeof (long), n -= sizeof (long); - } - while (n--) - *ptr++ = '\252'; -} -#endif BOTCH_FREE diff --git a/lang/cem/cemcom/storage.h b/lang/cem/cemcom/storage.h deleted file mode 100644 index 8eec82148..000000000 --- a/lang/cem/cemcom/storage.h +++ /dev/null @@ -1,23 +0,0 @@ -/* $Header$ */ -/* S T R U C T U R E - S T O R A G E D E F I N I T I O N S */ - -/* Storage allocation is one of the most expensive operations in - the compiler and consequently much thought and experimentation - has gone into it. To simplify the hooking in of new super-fancy - algorithms, all allocating and freeing of storage for structs - goes through the macros - st_alloc(&head, size) - st_free(ptr, head, size) - which, hopefully, convey enough information. -*/ - -extern char *head_alloc(); - -#define st_alloc(headp, size) head_alloc((char **)headp, size) - -#ifndef BOTCH_FREE -#define st_free(ptr, head, size) (ptr->next = head, head = ptr) -#else def BOTCH_FREE -#define st_free(ptr, head, size) (botch((char *)(ptr), size), \ - ptr->next = head, head = ptr) -#endif BOTCH_FREE diff --git a/lang/cem/cemcom/string.c b/lang/cem/cemcom/string.c deleted file mode 100644 index 5a61cc304..000000000 --- a/lang/cem/cemcom/string.c +++ /dev/null @@ -1,277 +0,0 @@ -/* $Header$ */ -/* STRING MANIPULATION AND PRINT ROUTINES */ - -#include -#include "string.h" -#include "nopp.h" -#include "str_params.h" -#include "arith.h" - -doprnt(fp, fmt, argp) - File *fp; - char *fmt; - int argp[]; -{ - char buf[SSIZE]; - - sys_write(fp, buf, format(buf, fmt, (char *)argp)); -} - -/*VARARGS1*/ -printf(fmt, args) - char *fmt; - char args; -{ - char buf[SSIZE]; - - sys_write(STDOUT, buf, format(buf, fmt, &args)); -} - -/*VARARGS1*/ -fprintf(fp, fmt, args) - File *fp; - char *fmt; - char args; -{ - char buf[SSIZE]; - - sys_write(fp, buf, format(buf, fmt, &args)); -} - -/*VARARGS1*/ -char * -sprintf(buf, fmt, args) - char *buf, *fmt; - char args; -{ - buf[format(buf, fmt, &args)] = '\0'; - return buf; -} - -int -format(buf, fmt, argp) - char *buf, *fmt; - char *argp; -{ - register char *pf = fmt, *pa = argp; - register char *pb = buf; - - while (*pf) { - if (*pf == '%') { - register width, base, pad, npad; - char *arg; - char cbuf[2]; - char *badformat = ""; - - /* get padder */ - if (*++pf == '0') { - pad = '0'; - ++pf; - } - else - pad = ' '; - - /* get width */ - width = 0; - while (*pf >= '0' && *pf <= '9') - width = 10 * width + *pf++ - '0'; - - /* get text and move pa */ - if (*pf == 's') { - arg = *(char **)pa; - pa += sizeof(char *); - } - else - if (*pf == 'c') { - cbuf[0] = * (char *) pa; - cbuf[1] = '\0'; - pa += sizeof(int); - arg = &cbuf[0]; - } - else - if (*pf == 'l') { - /* alignment ??? */ - if (base = integral(*++pf)) { - arg = int_str(*(long *)pa, base); - pa += sizeof(long); - } - else { - pf--; - arg = badformat; - } - } - else - if (base = integral(*pf)) { - arg = int_str((long)*(int *)pa, base); - pa += sizeof(int); - } - else - if (*pf == '%') - arg = "%"; - else - arg = badformat; - - npad = width - strlen(arg); - - while (npad-- > 0) - *pb++ = pad; - - while (*pb++ = *arg++); - pb--; - pf++; - } - else - *pb++ = *pf++; - } - return pb - buf; -} - -integral(c) -{ - switch (c) { - case 'b': - return -2; - case 'd': - return 10; - case 'o': - return -8; - case 'u': - return -10; - case 'x': - return -16; - } - return 0; -} - -/* Integer to String translator -*/ -char * -int_str(val, base) - register long val; - register base; -{ - /* int_str() is a very simple integer to string converter. - base < 0 : unsigned. - base must be an element of [-16,-2] V [2,16]. - */ - static char numbuf[MAXWIDTH]; - static char vec[] = "0123456789ABCDEF"; - register char *p = &numbuf[MAXWIDTH]; - int sign = (base > 0); - - *--p = '\0'; /* null-terminate string */ - if (val) { - if (base > 0) { - if (val < (arith)0) { - if ((val = -val) < (arith)0) - goto overflow; - } - else - sign = 0; - } - else - if (base < 0) { /* unsigned */ - base = -base; - if (val < (arith)0) { - register mod, i; - - overflow: - /* this takes a rainy Sunday afternoon to explain */ - /* ??? */ - mod = 0; - for (i = 0; i < 8 * sizeof val; i++) { - mod <<= 1; - if (val < 0) - mod++; - val <<= 1; - if (mod >= base) { - mod -= base; - val++; - } - } - *--p = vec[mod]; - } - } - - do { - *--p = vec[(int) (val % base)]; - val /= base; - } while (val != (arith)0); - - if (sign) - *--p = '-'; /* don't forget it !! */ - } - else - *--p = '0'; /* just a simple 0 */ - - return p; -} - -/* return negative, zero or positive value if - resp. s < t, s == t or s > t -*/ -int -strcmp(s, t) - register char *s, *t; -{ - while (*s == *t++) - if (*s++ == '\0') - return 0; - return *s - *--t; -} - -/* return length of s -*/ -int -strlen(s) - char *s; -{ - register char *b = s; - - while (*b++) - ; - return b - s - 1; -} - -#ifndef NOPP -/* append t to s -*/ -char * -strcat(s, t) - register char *s, *t; -{ - register char *b = s; - - while (*s++) - ; - s--; - while (*s++ = *t++) - ; - return b; -} - -/* Copy t into s -*/ -char * -strcpy(s, t) - register char *s, *t; -{ - register char *b = s; - - while (*s++ = *t++) - ; - return b; -} - -char * -rindex(str, chr) - register char *str, chr; -{ - register char *retptr = 0; - - while (*str) - if (*str++ == chr) - retptr = &str[-1]; - return retptr; -} -#endif NOPP diff --git a/lang/cem/cemcom/string.h b/lang/cem/cemcom/string.h deleted file mode 100644 index ffeeb6bba..000000000 --- a/lang/cem/cemcom/string.h +++ /dev/null @@ -1,13 +0,0 @@ -/* $Header$ */ -/* STRING-ROUTINE DEFINITIONS */ - -#define stdin 0 -#define stdout 1 -#define stderr 2 - -#define itos(n) int_str((long)(n), 10) - -char *sprintf(); /* string.h */ -char *int_str(); /* string.h */ - -char *strcpy(), *strcat(), *rindex(); diff --git a/lang/cem/cemcom/struct.h b/lang/cem/cemcom/struct.h deleted file mode 100644 index 8caab6786..000000000 --- a/lang/cem/cemcom/struct.h +++ /dev/null @@ -1,44 +0,0 @@ -/* $Header$ */ -/* SELECTOR DESCRIPTOR */ - -struct sdef { /* for selectors */ - struct sdef *next; - int sd_level; - struct idf *sd_idf; /* its name */ - struct sdef *sd_sdef; /* the next selector */ - struct type *sd_stype; /* the struct it belongs to */ - struct type *sd_type; /* its type */ - arith sd_offset; -}; - -extern char *st_alloc(); - - -/* allocation definitions of struct sdef */ -/* ALLOCDEF "sdef" */ -extern char *st_alloc(); -extern struct sdef *h_sdef; -#define new_sdef() ((struct sdef *) \ - st_alloc((char **)&h_sdef, sizeof(struct sdef))) -#define free_sdef(p) st_free(p, h_sdef, sizeof(struct sdef)) - - -struct tag { /* for struct-, union- and enum tags */ - struct tag *next; - int tg_level; - int tg_busy; /* non-zero during declaration of struct/union pack */ - struct type *tg_type; -}; - - - -/* allocation definitions of struct tag */ -/* ALLOCDEF "tag" */ -extern char *st_alloc(); -extern struct tag *h_tag; -#define new_tag() ((struct tag *) \ - st_alloc((char **)&h_tag, sizeof(struct tag))) -#define free_tag(p) st_free(p, h_tag, sizeof(struct tag)) - - -struct sdef *idf2sdef(); diff --git a/lang/cem/cemcom/switch.h b/lang/cem/cemcom/switch.h deleted file mode 100644 index 07998b9e7..000000000 --- a/lang/cem/cemcom/switch.h +++ /dev/null @@ -1,40 +0,0 @@ -/* $Header$ */ -/* S W I T C H - T A B L E - S T R U C T U R E */ - -struct switch_hdr { - struct switch_hdr *next; - label sh_break; - label sh_default; - label sh_table; - int sh_nrofentries; - struct type *sh_type; - arith sh_lowerbd; - arith sh_upperbd; - struct case_entry *sh_entries; -}; - - -/* allocation definitions of struct switch_hdr */ -/* ALLOCDEF "switch_hdr" */ -extern char *st_alloc(); -extern struct switch_hdr *h_switch_hdr; -#define new_switch_hdr() ((struct switch_hdr *) \ - st_alloc((char **)&h_switch_hdr, sizeof(struct switch_hdr))) -#define free_switch_hdr(p) st_free(p, h_switch_hdr, sizeof(struct switch_hdr)) - - -struct case_entry { - struct case_entry *next; - label ce_label; - arith ce_value; -}; - - -/* allocation definitions of struct case_entry */ -/* ALLOCDEF "case_entry" */ -extern char *st_alloc(); -extern struct case_entry *h_case_entry; -#define new_case_entry() ((struct case_entry *) \ - st_alloc((char **)&h_case_entry, sizeof(struct case_entry))) -#define free_case_entry(p) st_free(p, h_case_entry, sizeof(struct case_entry)) - diff --git a/lang/cem/cemcom/system.c b/lang/cem/cemcom/system.c deleted file mode 100644 index dd80863b1..000000000 --- a/lang/cem/cemcom/system.c +++ /dev/null @@ -1,72 +0,0 @@ -/* $Header$ */ -/* SYSTEM DEPENDENT ROUTINES */ - -#include "system.h" -#include "inputtype.h" -#include - -extern long lseek(); - -int -xopen(name, flag, mode) - char *name; -{ - if (name[0] == '-' && name[1] == '\0') - return (flag == OP_RDONLY) ? 0 : 1; - - switch (flag) { - - case OP_RDONLY: - return open(name, 0); - case OP_WRONLY: - return open(name, 1); - case OP_CREAT: - return creat(name, mode); - case OP_APPEND: - { - register fd; - - if ((fd = open(name, 1)) < 0) - return -1; - lseek(fd, 0L, 2); - return fd; - } - } - /*NOTREACHED*/ -} - -int -xclose(fildes) -{ - if (fildes != 0 && fildes != 1) - return close(fildes); - return -1; -} - -#ifdef READ_IN_ONE -long -xfsize(fildes) -{ - struct stat stbuf; - - if (fstat(fildes, &stbuf) != 0) - return -1; - return stbuf.st_size; -} -#endif READ_IN_ONE - -exit(n) -{ - _exit(n); -} - -xstop(how, stat) -{ - switch (how) { - case S_ABORT: - abort(); - case S_EXIT: - exit(stat); - } - /*NOTREACHED*/ -} diff --git a/lang/cem/cemcom/system.h b/lang/cem/cemcom/system.h deleted file mode 100644 index ae69ff8cb..000000000 --- a/lang/cem/cemcom/system.h +++ /dev/null @@ -1,34 +0,0 @@ -/* $Header$ */ -/* SYSTEM DEPENDANT DEFINITIONS */ - -#include -#include - -#define OP_RDONLY 0 /* open for read */ -#define OP_WRONLY 1 /* open for write */ -#define OP_CREAT 2 /* create and open for write */ -#define OP_APPEND 3 /* open for write at end */ - -#define sys_open(name, flag) xopen(name, flag, 0) -#define sys_close(fildes) xclose(fildes) -#define sys_read(fildes, buffer, nbytes) read(fildes, buffer, nbytes) -#define sys_write(fildes, buffer, nbytes) write(fildes, buffer, nbytes) -#define sys_creat(name, mode) xopen(name, OP_CREAT, mode) -#define sys_remove(name) unlink(name) -#define sys_fsize(fd) xfsize(fd) -#define sys_sbrk(incr) sbrk(incr) -#define sys_stop(how, stat) xstop(how, stat) - -#define S_ABORT 1 -#define S_EXIT 2 - -char *sbrk(); -long xfsize(); - -extern int errno; - -#define sys_errno errno - -#define time_type time_t -#define sys_time(tloc) time(tloc) -time_type time(); diff --git a/lang/cem/cemcom/tab.c b/lang/cem/cemcom/tab.c deleted file mode 100644 index 1881d087e..000000000 --- a/lang/cem/cemcom/tab.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* @cc tab.c -o $INSTALLDIR/tab@ - tab - table generator - - Author: Erik Baalbergen (..tjalk!erikb) -*/ - -#include - -#define MAXTAB 10000 -#define MAXBUF 10000 -#define COMCOM '-' -#define FILECOM '%' - -int InputForm = 'c'; -char OutputForm[MAXBUF] = "%s,\n"; -int TabSize = 257; -char *Table[MAXTAB]; -char *ProgCall; - -main(argc, argv) - char *argv[]; -{ - ProgCall = *argv++; - argc--; - while (argc-- > 0) { - if (**argv == COMCOM) { - option(*argv++); - } - else { - process(*argv++, InputForm); - } - } - exit(0); -} - -char * -Salloc(s) - char *s; -{ - extern char *malloc(), *strcpy(); - char *ns = malloc((unsigned int)strlen(s) + 1); - - if (ns) { - strcpy(ns, s); - } - return ns; -} - -option(str) - char *str; -{ - /* note that *str indicates the source of the option: - either COMCOM (from command line) or FILECOM (from a file). - */ - extern char *sprintf(); - - switch (*++str) { - - case ' ': /* command */ - case '\t': - case '\0': - break; - case 'I': - InputForm = *++str; - break; - case 'f': - if (*++str == '\0') { - fprintf(stderr, "%s: -f: name expected\n", ProgCall); - exit(1); - } - DoFile(str); - break; - case 'F': - sprintf(OutputForm, "%s\n", ++str); - break; - case 'T': - printf("%s\n", ++str); - break; - case 'p': - PrintTable(); - break; - case 'C': - ClearTable(); - break; - case 'S': - { - register i = stoi(++str); - - if (i <= 0 || i > MAXTAB) { - fprintf(stderr, "%s: size would exceed maximum\n", - ProgCall); - } - else { - TabSize = i; - } - break; - } - default: - fprintf(stderr, "%s: bad option -%s\n", ProgCall, str); - } -} - -ClearTable() -{ - register i; - - for (i = 0; i < MAXTAB; i++) { - Table[i] = 0; - } -} - -PrintTable() -{ - register i; - - for (i = 0; i < TabSize; i++) { - if (Table[i]) { - printf(OutputForm, Table[i]); - } - else { - printf(OutputForm, "0"); - } - } -} - -process(str, format) - char *str; -{ - char *cstr = str; - char *Name = cstr; /* overwrite original string! */ - - /* strip of the entry name - */ - while (*str && *str != ':') { - if (*str == '\\') { - ++str; - } - *cstr++ = *str++; - } - - if (*str != ':') { - fprintf(stderr, "%s: bad specification: \"%s\", ignored\n", - ProgCall, Name); - return 0; - } - *cstr = '\0'; - str++; - - switch (format) { - - case 'c': - return c_proc(str, Name); - default: - fprintf(stderr, "%s: bad input format\n", ProgCall); - } - return 0; -} - -c_proc(str, Name) - char *str; - char *Name; -{ - int ch, ch2; - int quoted(); - - while (*str) { - if (*str == '\\') { - ch = quoted(&str); - } - else { - ch = *str++; - } - if (*str == '-') { - if (*++str == '\\') { - ch2 = quoted(&str); - } - else { - if (ch2 = *str++); - else str--; - } - if (ch > ch2) { - fprintf(stderr, "%s: bad range\n", ProgCall); - return 0; - } - if (ch >= 0 && ch2 <= 255) - while (ch <= ch2) - Table[ch++] = Salloc(Name); - } - else { - if (ch >= 0 && ch <= 255) - Table[ch] = Salloc(Name); - } - } - return 1; -} - -int -quoted(pstr) - char **pstr; -{ - register int ch; - register int i; - register char *str = *pstr; - - if ((*++str >= '0') && (*str <= '9')) { - ch = 0; - for (i = 0; i < 3; i++) { - ch = 8 * ch + *str - '0'; - if (*++str < '0' || *str > '9') - break; - } - } - else { - switch (*str++) { - - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'b': - ch = '\b'; - break; - case 'r': - ch = '\r'; - break; - case 'f': - ch = '\f'; - break; - default : - ch = *str; - } - } - *pstr = str; - return ch & 0377; -} - -int -stoi(str) - char *str; -{ - register i = 0; - - while (*str >= '0' && *str <= '9') { - i = i * 10 + *str++ - '0'; - } - return i; -} - -char * -getline(s, n, fp) - char *s; - FILE *fp; -{ - register c = getc(fp); - char *str = s; - - while (n--) { - if (c == EOF) { - return NULL; - } - else - if (c == '\n') { - *str++ = '\0'; - return s; - } - *str++ = c; - c = getc(fp); - } - s[n - 1] = '\0'; - return s; -} - -#define BUFSIZE 1024 - -DoFile(name) - char *name; -{ - char text[BUFSIZE]; - FILE *fp; - - if ((fp = fopen(name, "r")) == NULL) { - fprintf(stderr, "%s: cannot read file %s\n", ProgCall, name); - exit(1); - } - while (getline(text, BUFSIZE, fp) != NULL) { - if (text[0] == FILECOM) { - option(text); - } - else { - process(text, InputForm); - } - } -} diff --git a/lang/cem/cemcom/type.h b/lang/cem/cemcom/type.h deleted file mode 100644 index 1937a569e..000000000 --- a/lang/cem/cemcom/type.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Header$ */ -/* TYPE DESCRIPTOR */ - -#include "nobitfield.h" - -struct type { - struct type *next; /* used only with ARRAY */ - short tp_fund; /* fundamental type */ - char tp_unsigned; - int tp_align; - arith tp_size; /* -1 if declared but not defined */ - struct idf *tp_idf; /* name of STRUCT, UNION or ENUM */ - struct sdef *tp_sdef; /* to first selector */ - struct type *tp_up; /* from FIELD, POINTER, ARRAY - or FUNCTION to fund. */ - struct field *tp_field; /* field descriptor if fund == FIELD */ - struct type *tp_pointer;/* to POINTER */ - struct type *tp_array; /* to ARRAY */ - struct type *tp_function;/* to FUNCTION */ -}; - -extern struct type - *create_type(), *standard_type(), *construct_type(), *pointer_to(), - *array_of(), *function_of(); - -#ifndef NOBITFIELD -extern struct type *field_of(); -#endif NOBITFIELD - -extern struct type - *char_type, *uchar_type, - *short_type, *ushort_type, - *word_type, *uword_type, - *int_type, *uint_type, - *long_type, *ulong_type, - *float_type, *double_type, - *void_type, *label_type, - *string_type, *funint_type, *error_type; - -extern struct type *pa_type; /* type.c */ - -extern arith size_of_type(), align(); - - -/* allocation definitions of struct type */ -/* ALLOCDEF "type" */ -extern char *st_alloc(); -extern struct type *h_type; -#define new_type() ((struct type *) \ - st_alloc((char **)&h_type, sizeof(struct type))) -#define free_type(p) st_free(p, h_type, sizeof(struct type)) - diff --git a/lang/cem/cpp.ansi/Makefile b/lang/cem/cpp.ansi/Makefile deleted file mode 100644 index 4431323d5..000000000 --- a/lang/cem/cpp.ansi/Makefile +++ /dev/null @@ -1,266 +0,0 @@ -# MAKEFILE FOR (STAND_ALONE) CEM PREPROCESSOR - -EMHOME=../../.. -MODULES=$(EMHOME)/modules -MODULESLIB=$(MODULES)/lib -BIN=$(EMHOME)/lib -MANDIR=$(EMHOME)/man - -# Some paths - -# Libraries -SYSLIB = $(MODULESLIB)/libsystem.a -STRLIB = $(MODULESLIB)/libstring.a -PRTLIB = $(MODULESLIB)/libprint.a -ALLOCLIB = $(MODULESLIB)/liballoc.a -ASSERTLIB = $(MODULESLIB)/libassert.a -MALLOC = $(MODULESLIB)/malloc.o -LIBS = $(PRTLIB) $(STRLIB) $(ALLOCLIB) $(MALLOC) $(ASSERTLIB) $(SYSLIB) -LIB_INCLUDES = -I$(MODULES)/h -I$(MODULES)/pkg - -# Where to install the preprocessor -CEMPP = $(BIN)/cpp.ansi - -TABGEN = $(EMHOME)/bin/tabgen - -# What C compiler to use and how -CC = cc -COPTIONS = -O -LDFLAGS = - -# What parser generator to use and how -GEN = $(EMHOME)/bin/LLgen -GENOPTIONS = - -# Special #defines during compilation -CDEFS = $(LIB_INCLUDES) -CFLAGS = $(CDEFS) $(COPTIONS)# # we cannot pass the COPTIONS to lint! - -# Grammar files and their objects -LSRC = tokenfile.g expression.g -LCSRC = tokenfile.c expression.c Lpars.c -LOBJ = tokenfile.o expression.o Lpars.o - -# Objects of hand-written C files -CSRC = LLlex.c LLmessage.c ch3bin.c ch3mon.c domacro.c \ - error.c idf.c init.c input.c main.c options.c \ - preprocess.c replace.c skip.c tokenname.c expr.c -COBJ = LLlex.o LLmessage.o ch3bin.o ch3mon.o domacro.o \ - error.o idf.o init.o input.o main.o options.o \ - preprocess.o replace.o skip.o tokenname.o next.o expr.o - -PRFILES = Makefile Parameters \ - make.hfiles make.tokcase make.tokfile LLlex.h bits.h file_info.h \ - idf.h input.h interface.h macro.str replace.str \ - class.h char.tab expression.g $(CSRC) - -# Objects of other generated C files -GOBJ = char.o symbol2str.o - -# generated source files -GSRC = char.c symbol2str.c next.c - -# .h files generated by `make.allod' -STRSRC = macro.str replace.str -GSTRSRC = macro.h replace.h - -# .h files generated by `make hfiles'; PLEASE KEEP THIS UP-TO-DATE! -GHSRC = errout.h idfsize.h ifdepth.h macbuf.h \ - nparams.h numsize.h obufsize.h \ - parbufsize.h pathlength.h strsize.h textsize.h \ - botch_free.h debug.h inputtype.h dobits.h ln_prefix.h - -# Other generated files, for 'make clean' only -GENERATED = tokenfile.g Lpars.h LLfiles LL.output lint.out \ - Xref hfiles cfiles tags Makefile.old - -all: cc - -cc: cfiles - make "EMHOME="$(EMHOME) "CC=$(CC)" ncpp - -hfiles: Parameters char.c - ./make.hfiles Parameters - @touch hfiles - -.SUFFIXES: .str .h -.str.h: - ./make.allocd <$*.str >$*.h - -char.c: char.tab - $(TABGEN) -fchar.tab > char.c - -next.c: make.next $(STRSRC) - ./make.next $(STRSRC) >next.c - -macro.h: make.allocd -replace.h: make.allocd - -LLfiles: $(LSRC) - $(GEN) $(GENOPTIONS) $(LSRC) - @touch LLfiles - -tokenfile.g: tokenname.c make.tokfile - tokenfile.g - -symbol2str.c: tokenname.c make.tokcase - symbol2str.c - -# Objects needed for 'ncpp' -OBJ = $(COBJ) $(LOBJ) $(GOBJ) -SRC = $(CSRC) $(LCSRC) $(GSRC) - -ncpp: $(OBJ) Makefile - $(CC) $(COPTIONS) $(LDFLAGS) $(OBJ) $(LIBS) -o ncpp - -size ncpp - -cfiles: hfiles LLfiles $(GSRC) $(GSTRSRC) - @touch cfiles - -install: all - rm -f $(CEMPP) - cp ncpp $(CEMPP) - rm -f $(MANDIR)/cpp.ansi.6 - cp ncpp.6 $(MANDIR)/cpp.ansi.6 - -cmp: all - -cmp ncpp $(CEMPP) - -cmp ncpp.6 $(MANDIR)/cpp.ansi.6 - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -tags: cfiles - ctags $(SRC) - -depend: cfiles - sed '/^#AUTOAUTO/,$$d' Makefile >Makefile.new - echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >>Makefile.new - $(EMHOME)/bin/mkdep $(SRC) | \ - sed 's/\.c:/.o:/' >>Makefile.new - mv Makefile Makefile.old - mv Makefile.new Makefile - -xref: - ctags -x `grep "\.[ch]" Files`|sed "s/).*/)/">Xref - -lint: cfiles - lint -bx $(CDEFS) $(SRC) >lint.out - -clean: - rm -f $(LCSRC) $(OBJ) $(GENERATED) $(GSRC) $(GHSRC) $(GSTRSRC) ncpp Out - -#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO -LLlex.o: LLlex.h -LLlex.o: Lpars.h -LLlex.o: arith.h -LLlex.o: bits.h -LLlex.o: class.h -LLlex.o: dobits.h -LLlex.o: file_info.h -LLlex.o: idf.h -LLlex.o: idfsize.h -LLlex.o: input.h -LLlex.o: inputtype.h -LLlex.o: macro.h -LLlex.o: numsize.h -LLlex.o: strsize.h -LLmessage.o: LLlex.h -LLmessage.o: Lpars.h -LLmessage.o: arith.h -LLmessage.o: file_info.h -ch3bin.o: Lpars.h -ch3bin.o: arith.h -ch3mon.o: Lpars.h -ch3mon.o: arith.h -domacro.o: LLlex.h -domacro.o: Lpars.h -domacro.o: arith.h -domacro.o: bits.h -domacro.o: botch_free.h -domacro.o: class.h -domacro.o: dobits.h -domacro.o: file_info.h -domacro.o: idf.h -domacro.o: idfsize.h -domacro.o: ifdepth.h -domacro.o: input.h -domacro.o: inputtype.h -domacro.o: macbuf.h -domacro.o: macro.h -domacro.o: nparams.h -domacro.o: parbufsize.h -domacro.o: replace.h -domacro.o: textsize.h -error.o: LLlex.h -error.o: arith.h -error.o: errout.h -error.o: file_info.h -idf.o: idf.h -init.o: class.h -init.o: idf.h -init.o: macro.h -input.o: file_info.h -input.o: input.h -input.o: inputtype.h -main.o: arith.h -main.o: file_info.h -main.o: idf.h -main.o: idfsize.h -main.o: macro.h -options.o: class.h -options.o: idf.h -options.o: idfsize.h -options.o: macro.h -preprocess.o: LLlex.h -preprocess.o: arith.h -preprocess.o: bits.h -preprocess.o: class.h -preprocess.o: dobits.h -preprocess.o: file_info.h -preprocess.o: idf.h -preprocess.o: idfsize.h -preprocess.o: input.h -preprocess.o: inputtype.h -preprocess.o: ln_prefix.h -preprocess.o: macro.h -preprocess.o: obufsize.h -preprocess.o: textsize.h -replace.o: LLlex.h -replace.o: arith.h -replace.o: class.h -replace.o: file_info.h -replace.o: idf.h -replace.o: idfsize.h -replace.o: input.h -replace.o: inputtype.h -replace.o: macbuf.h -replace.o: macro.h -replace.o: nparams.h -replace.o: numsize.h -replace.o: pathlength.h -replace.o: replace.h -replace.o: strsize.h -skip.o: LLlex.h -skip.o: arith.h -skip.o: class.h -skip.o: file_info.h -skip.o: input.h -skip.o: inputtype.h -tokenname.o: LLlex.h -tokenname.o: Lpars.h -tokenname.o: arith.h -tokenname.o: file_info.h -tokenname.o: idf.h -expr.o: Lpars.h -tokenfile.o: Lpars.h -expression.o: LLlex.h -expression.o: Lpars.h -expression.o: arith.h -expression.o: file_info.h -Lpars.o: Lpars.h -char.o: class.h -symbol2str.o: Lpars.h diff --git a/lang/cem/cpp.ansi/nccp.6 b/lang/cem/cpp.ansi/nccp.6 deleted file mode 100644 index d72f72693..000000000 --- a/lang/cem/cpp.ansi/nccp.6 +++ /dev/null @@ -1,74 +0,0 @@ -.TH NCPP 6ACK -.ad -.SH NAME -ncpp \- New C Pre-Processor -.SH SYNOPSIS -ncpp [\-options] [ file ] -.SH DESCRIPTION -.I Ncpp -reads a file, expands macros and include -files, and writes an input file for the C compiler. -All output is to standard output. -.br -The following options are supported. -.IP -\fBI\fIdirectory\fR -.br -add this directory to the list of -directories searched for #include "..." and #include <...> -commands. Note that there is no space between the -"-I" and the directory string. More than one -I command -is permitted. -.IP -\fBI\fR -end the list of directories to be searched, and also do not look in -default places. -.IP -\fBD\fIname\fR=\fItext\fR -.br -define -.I name -as a macro with -.I text -as its replacement text. -.IP -\fBD\fIname\fR -the same as -\fBD\fIname\fR=1. -.IP -.IP -\fBU\fIname\fR -.br -undefine the macro name -.IR name . -.IP -\fBC\fR -leave comments in. By default, C-comments are deleted. -.IP -\fBP\fR -do not generate line directives -.IP -\fBM\fIn\fR -set maximum identifier length to -.IR n . -.PP -The following names are always available unless undefined: -.RS -.IP __STDC__ -A decimal constant 1, indicating that this is an ANSI C conforming -implementation. -.IP __FILE__ -The input (or #include) file being compiled -(as a quoted string). -.IP __LINE__ -The line number being compiled. -.IP __DATE__ -The date of translation of the source file. This is a string -literal of the form "\fBMmm dd yyyy\fP". -.IP __TIME__ -The time of translation of the source file. This is a string -literal of the form "\fBhh:mm:ss\fP". -.RE -.SH BUGS -The output may contain extra spaces, this prevents unintended -pasting of tokens. -.SH "SEE ALSO" -L. Rosler, -.I -Draft Proposed Standard - Programming Language C, -.R -ANSI X3J11 Language Subcommittee -.SH AUTHOR -Leendert van Doorn - diff --git a/lang/cem/ctest/ctstruct/str.pcc.r b/lang/cem/ctest/ctstruct/str.pcc.r deleted file mode 100644 index a6b5ad356..000000000 --- a/lang/cem/ctest/ctstruct/str.pcc.r +++ /dev/null @@ -1,152 +0,0 @@ -w1 - st2.w1_i 506 - (*st3).w1_i 506 - st1.w1_i 711 - st2.w1_i 711 - es2[2].w1_i 711 - st2.w1_i 577 - st2.w1_i -577 - st1.w1_i 577 -w2 - s2t2: .w2_i 18000 .w2_d 3.141500 - s2t3->w2_d 3.141500 -w3 -s3t2.w3_a[ 0] a -s3t2.w3_a[ 1] b -s3t2.w3_a[ 2] c -s3t2.w3_a[ 3] d -s3t2.w3_a[ 4] e -s3t2.w3_a[ 5] f -s3t2.w3_a[ 6] g -s3t2.w3_a[ 7] h -s3t2.w3_a[ 8] i -s3t2.w3_a[ 9] j -s3t2.w3_a[10] k -s3t2.w3_a[11] l -s3t2.w3_a[12] m -s3t2.w3_a[13] n -s3t2.w3_a[14] o -s3t2.w3_a[15] p -s3t2.w3_a[16] q -s3t2.w3_a[17] r -s3t2.w3_a[18] s -s3t2.w3_a[19] t -s3t2.w3_a[20] u -s3t2.w3_a[21] v -s3t2.w3_a[22] w -s3t2.w3_a[23] x -s3t2.w3_a[24] y -s3t2.w3_a[25] z -s3t2.w3_x 1.000000 -s3t1.w3_a[ 0] A -s3t1.w3_a[ 1] B -s3t1.w3_a[ 2] C -s3t1.w3_a[ 3] D -s3t1.w3_a[ 4] E -s3t1.w3_a[ 5] F -s3t1.w3_a[ 6] G -s3t1.w3_a[ 7] H -s3t1.w3_a[ 8] I -s3t1.w3_a[ 9] J -s3t1.w3_a[10] K -s3t1.w3_a[11] L -s3t1.w3_a[12] M -s3t1.w3_a[13] N -s3t1.w3_a[14] O -s3t1.w3_a[15] P -s3t1.w3_a[16] Q -s3t1.w3_a[17] R -s3t1.w3_a[18] S -s3t1.w3_a[19] T -s3t1.w3_a[20] U -s3t1.w3_a[21] V -s3t1.w3_a[22] W -s3t1.w3_a[23] X -s3t1.w3_a[24] Y -s3t1.w3_a[25] Z -s3t1.w3_x 0.318319 -structure parameters -before -1 -str.w3_a[ 0] 1 -str.w3_a[ 1] 2 -str.w3_a[ 2] 3 -str.w3_a[ 3] 4 -str.w3_a[ 4] 5 -str.w3_a[ 5] 6 -str.w3_a[ 6] 7 -str.w3_a[ 7] 8 -str.w3_a[ 8] 9 -str.w3_a[ 9] 10 -str.w3_a[10] 11 -str.w3_a[11] 12 -str.w3_a[12] 13 -str.w3_a[13] 14 -str.w3_a[14] 15 -str.w3_a[15] 16 -str.w3_a[16] 17 -str.w3_a[17] 18 -str.w3_a[18] 19 -str.w3_a[19] 20 -str.w3_a[20] 21 -str.w3_a[21] 22 -str.w3_a[22] 23 -str.w3_a[23] 24 -str.w3_a[24] 25 -str.w3_a[25] 26 -str.w3_x 2.810000 -after 1000 - -Stucture valued functions -myp.w3_a: - 0 97 - 1 96 - 2 95 - 3 94 - 4 93 - 5 92 - 6 91 - 7 90 - 8 89 - 9 88 - 10 87 - 11 86 - 12 85 - 13 84 - 14 83 - 15 82 - 16 81 - 17 80 - 18 79 - 19 78 - 20 77 - 21 76 - 22 75 - 23 74 - 24 73 - 25 72 - 0 99 - 1 100 - 2 101 - 3 102 - 4 103 - 5 104 - 6 105 - 7 106 - 8 107 - 9 108 - 10 109 - 11 110 - 12 111 - 13 112 - 14 113 - 15 114 - 16 115 - 17 116 - 18 117 - 19 118 - 20 119 - 21 120 - 22 121 - 23 122 - 24 123 - 25 124 diff --git a/lang/cem/ctest/makefile b/lang/cem/ctest/makefile deleted file mode 100644 index 89b1ad6a0..000000000 --- a/lang/cem/ctest/makefile +++ /dev/null @@ -1,53 +0,0 @@ -.SILENT: -CEM=acc -head: - echo use run - -diffs: $P.cc.r $P.cem.r - echo two compiler diff - -diff $P.*.r - -diffs3: $P.pcc.r $P.cc.r $P.cem.r - echo three compiler diff - -diff3 $P.*.r | tee diffs -egen: $P.e - echo comparing $P.e - -if test -f $P.e.g ; then diff -h $P.e $P.e.g ; else echo creating $P.e.g ; cp $P.e $P.e.g ; fi - rm -f $P.e -$P.e: $P.c - $(CEM) -c.e $P.c -$P.pcc.r: $P.pcc - echo running $P.pcc - -$P.pcc >$P.pcc.r - rm -f $P.pcc -$P.cc.r: $P.cc - echo running $P.cc - -$P.cc >$P.cc.r - rm -f $P.cc -$P.cem.r: $P.cem - echo running $P.cem - -$P.cem >$P.cem.r - rm -f $P.cem -$P.pcc: /tmp - echo pcc $P.c - pcc -o $P.pcc $P.c -$P.cc: /tmp - echo cc $P.c - cc -o $P.cc $P.c -$P.cem: /tmp - echo $(CEM) $P.c - $(CEM) -o $P.cem $P.c -gen: $P.cem.r - echo comparing $P - -if test -f $P.cem.g ; then diff -h $P.cem.r $P.cem.g ; else echo creating $P.cem.g ; cp $P.cem.r $P.cem.g ; fi - -install cmp: - -pr: - @pr `pwd`/$P.c `pwd`/$P.cem.g - -opr: - make pr | opr - -clean: - -rm -f $P.[kmsoe] $P.*.r core a.out *.old em_last em_runinf e.out diff --git a/lang/cem/ctest/makefile.i86 b/lang/cem/ctest/makefile.i86 deleted file mode 100644 index 5fec701b1..000000000 --- a/lang/cem/ctest/makefile.i86 +++ /dev/null @@ -1,54 +0,0 @@ -.SILENT: -CEM=i86 -DNOFLOAT -head: - echo use run - -diffs: $P.cc.r $P.cem.r - echo two compiler diff - -diff $P.*.r - -diffs3: $P.pcc.r $P.cc.r $P.cem.r - echo three compiler diff - -diff3 $P.*.r | tee diffs -egen: $P.e - echo comparing $P.e - -if test -f $P.e.g ; then diff -h $P.e $P.e.g ; else echo creating $P.e.g ; cp $P.e $P.e.g ; fi - rm -f $P.e -$P.e: $P.c $(CEM) - $(CEM) -c.e $P.c -$P.pcc.r: $P.pcc - echo running $P.pcc - -$P.pcc >$P.pcc.r - rm -f $P.pcc -$P.cc.r: $P.cc - echo running $P.cc - -$P.cc >$P.cc.r - rm -f $P.cc -$P.cem.r: $P.cem - echo running $P.cem - idl I7 $P.cem - -talk I7 >$P.cem.r - rm -f $P.cem -$P.pcc: $P.c /usr/lib/ccom - echo pcc $P.c - pcc -o $P.pcc $P.c -$P.cc: $P.c /lib/c0 /lib/c1 - echo cc $P.c - cc -o $P.cc $P.c -$P.cem: $P.c - echo $(CEM) $P.c - $(CEM) -o $P.cem $P.c -gen: $P.cem.r - echo comparing $P - -if test -f $P.cem.g ; then diff -h $P.cem.r $P.cem.g ; else echo creating $P.cem.g ; cp $P.cem.r $P.cem.g ; fi - -install cmp: - -pr: - @pr `pwd`/$P.c `pwd`/$P.cem.g - -opr: - make pr | opr - -clean: - -rm -f $P.[kmsoe] $P.*.r core a.out *.old diff --git a/lang/cem/ctest/makefile.int b/lang/cem/ctest/makefile.int deleted file mode 100644 index 82c77f0b8..000000000 --- a/lang/cem/ctest/makefile.int +++ /dev/null @@ -1,53 +0,0 @@ -.SILENT: -CEM=int -O -head: - echo use run - -diffs: $P.cc.r $P.cem.r - echo two compiler diff - -diff $P.*.r - -diffs3: $P.pcc.r $P.cc.r $P.cem.r - echo three compiler diff - -diff3 $P.*.r | tee diffs -egen: $P.e - echo comparing $P.e - -if test -f $P.e.g ; then diff -h $P.e $P.e.g ; else echo creating $P.e.g ; cp $P.e $P.e.g ; fi - rm -f $P.e -$P.e: $P.c $(CEM) - $(CEM) -c.e $P.c -$P.pcc.r: $P.pcc - echo running $P.pcc - -$P.pcc >$P.pcc.r - rm -f $P.pcc -$P.cc.r: $P.cc - echo running $P.cc - -$P.cc >$P.cc.r - rm -f $P.cc -$P.cem.r: $P.cem - echo running $P.cem - -/usr/evert/compile/a.out $P.cem >$P.cem.r - rm -f $P.cem -$P.pcc: $P.c /usr/lib/ccom - echo pcc $P.c - pcc -o $P.pcc $P.c -$P.cc: $P.c /lib/c0 /lib/c1 - echo cc $P.c - cc -o $P.cc $P.c -$P.cem: $P.c - echo $(CEM) $P.c - $(CEM) -o $P.cem $P.c -gen: $P.cem.r - echo comparing $P - -if test -f $P.cem.g ; then diff -h $P.cem.r $P.cem.g ; else echo creating $P.cem.g ; cp $P.cem.r $P.cem.g ; fi - -install cmp: - -pr: - @pr `pwd`/$P.c `pwd`/$P.cem.g - -opr: - make pr | opr - -clean: - -rm -f $P.[kmsoe] $P.*.r core a.out *.old diff --git a/lang/cem/ctest/out.std b/lang/cem/ctest/out.std deleted file mode 100644 index ee1b594ad..000000000 --- a/lang/cem/ctest/out.std +++ /dev/null @@ -1,174 +0,0 @@ -Tue May 22 15:12:22 MDT 1984 -***** ctconv -acc conv.c -conv.c -"conv.c", line 41: warning: Overflow in constant expression -running conv.cem -comparing conv -***** ctdecl -acc decl.c -decl.c -running decl.cem -comparing decl -***** ctdivers -acc ops.c -ops.c -running ops.cem -comparing ops -***** cterr -acc bugs.c -bugs.c -"bugs.c", line 92: warning: Overflow in constant expression -running bugs.cem -comparing bugs -9,$c9,$ -< compl_ind -< END ---- -> END -***** ctest1 -acc test.c -test.c -running test.cem -comparing test -***** ctest2 -acc t7.c -t7.c -"t7.c", line 161: warning: statement not reached -"t7.c", line 178: warning: statement not reached -"t7.c", line 182: warning: statement not reached -"t7.c", line 186: warning: statement not reached -"t7.c", line 190: warning: statement not reached -"t7.c", line 194: warning: statement not reached -"t7.c", line 198: warning: statement not reached -"t7.c", line 205: warning: statement not reached -"t7.c", line 207: warning: statement not reached -"t7.c", line 211: warning: statement not reached -"t7.c", line 213: warning: statement not reached -"t7.c", line 287: warning: statement not reached -"t7.c", line 294: warning: statement not reached -"t7.c", line 300: warning: statement not reached -"t7.c", line 307: warning: statement not reached -"t7.c", line 343: warning: statement not reached -"t7.c", line 344: warning: statement not reached -"t7.c", line 345: warning: statement not reached -"t7.c", line 346: warning: statement not reached -"t7.c", line 348: warning: statement not reached -"t7.c", line 452: warning: statement not reached -"t7.c", line 561: warning: statement not reached -"t7.c", line 589: warning: statement not reached -running t7.cem -comparing t7 -***** ctest3 -acc test2.c -test2.c -running test2.cem -comparing test2 -***** ctest5 -acc test1.c -test1.c -"test1.c", line 101: warning: Illegal shift count in constant expression -"test1.c", line 370: warning: illegal pointer combination -"test1.c", line 371: warning: illegal pointer combination -"test1.c", line 372: warning: illegal pointer combination -"test1.c", line 384: warning: illegal pointer combination -"test1.c", line 407: warning: illegal pointer combination -"test1.c", line 408: warning: illegal pointer combination -"test1.c", line 409: warning: illegal pointer combination -"test1.c", line 421: warning: illegal pointer combination -running test1.cem -comparing test1 -***** ctgen -`bf.c' is up to date. -acc bf.c -bf.c -running bf.cem -comparing bf -`cel.c' is up to date. -acc cel.c -cel.c -running cel.cem -comparing cel -`clu.c' is up to date. -acc clu.c -clu.c -"clu.c", line 60: warning: Overflow in constant expression -"clu.c", line 66: warning: Overflow in constant expression -running clu.cem -comparing clu -28c28 -< x *= 40000 0 ---- -> x *= 40000 6784 -65c65 -< y = ( x *= 40000 ) 0 0 ---- -> y = ( x *= 40000 ) 6784 6784 -102c102 -< no if ( x *= 40000 ) yes() ; else no() 0 ---- -> yes if ( x *= 40000 ) yes() ; else no() 6784 -`ec.c' is up to date. -acc ec.c -ec.c -"ec.c", line 58: warning: Overflow in constant expression -"ec.c", line 64: warning: Overflow in constant expression -running ec.cem -comparing ec -`ef.c' is up to date. -acc ef.c -ef.c -running ef.cem -comparing ef -`ei.c' is up to date. -acc ei.c -ei.c -"ei.c", line 22: warning: Overflow in constant expression -"ei.c", line 65: warning: Overflow in constant expression -"ei.c", line 108: warning: Overflow in constant expression -running ei.cem -comparing ei -`el.c' is up to date. -acc el.c -el.c -running el.cem -comparing el -`eu.c' is up to date. -acc eu.c -eu.c -"eu.c", line 58: warning: Overflow in constant expression -"eu.c", line 64: warning: Overflow in constant expression -running eu.cem -comparing eu -28c28 -< x *= 40000 0 ---- -> x *= 40000 6784 -65c65 -< y = ( x *= 40000 ) 0 0 ---- -> y = ( x *= 40000 ) 6784 6784 -102c102 -< no if ( x *= 40000 ) yes() ; else no() 0 ---- -> yes if ( x *= 40000 ) yes() ; else no() 6784 -`id.c' is up to date. -acc id.c -id.c -running id.cem -comparing id -`lc.c' is up to date. -acc lc.c -lc.c -"lc.c", line 60: warning: Overflow in constant expression -"lc.c", line 66: warning: Overflow in constant expression -running lc.cem -comparing lc -`ld.c' is up to date. -acc ld.c -ld.c -running ld.cem -comparing ld -`lf.c' is up to date. -acc lf.c -lf.c diff --git a/lang/cem/libcc.ansi/MakeArch b/lang/cem/libcc.ansi/MakeArch deleted file mode 100755 index 389363b09..000000000 --- a/lang/cem/libcc.ansi/MakeArch +++ /dev/null @@ -1,66 +0,0 @@ -: $Header$ -: This script makes an archive. The only option it knows is -o, which -: creates a library. - -rm -f OLIST - -case $# in - 0) - AR=tar - OLIB=libsrc - echo 'cf libsrc' > OLIST - ;; - 1) - if [ "X$1" != "X-o" ] - then - echo $0: unrecognised option, I only know -o >&2 - exit 1 - fi - AR=$ASAR - echo "rv $OLIB" > OLIST - ;; - *) - echo $0: too many arguments >&2 - exit 1 - ;; -esac - -if [ "X$AR" = "X" ] -then -echo EEK -- internal error, no archiver >&2 -exit 1 -fi - -if [ $AR = tar ] -then - echo LIST >> OLIST - echo MakeArch >> OLIST - echo Makefile >> OLIST - echo make.proto >> OLIST - echo head_ac.e >> OLIST -fi - -DIRS=`cat LIST` - -for i in $DIRS -do - cd $i - if make "MACH=$MACH" "MACHFL=$MACHFL" "SUF=$SUF" $AR -f ../Makefile - then - cd .. - if [ $AR = tar ] - then - echo $i/Makefile >> OLIST - echo $i/LIST >> OLIST - fi - for j in `cat $i/OLIST` - do - echo $i/$j >> OLIST - done - else - exit 1 - fi -done - -$AR `cat OLIST` -${RANLIB-:} $OLIB diff --git a/lang/cem/libcc.ansi/Makefile b/lang/cem/libcc.ansi/Makefile deleted file mode 100644 index c891159df..000000000 --- a/lang/cem/libcc.ansi/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -# $Header$ -# This Makefile is used for building the source archive as well as the -# actual library. - -EMHOME=../../.. -MACH=acc -MACHFL=-O -L -Rcem=$(EMHOME)/lib/em_cemcom.ansi -I../headers $(DEFS) -PREF=ac -SUB= -ASAR=arch -HEADSRC=$(HOME) -OLIB=tail_$(PREF)$(SUB) - -install: - MakeArch - -mkdir $(EMHOME)/include/tail_ac - ( cd headers; tar cf - `cat LIST` ) | ( cd $(EMHOME)/include/tail_ac ; tar xf - ) - -clean: - rm -f OLIST */OLIST - (cd ctype; make clean) - (cd stdlib; make clean) - -headcp: head - ../../install head_$(PREF).$(SUF) head_$(PREF) - rm -f head_$(PREF).$(SUF) - -head: head_$(PREF).e - make -r -f make.proto "CC=$(MACH)" "CFLAGS=-I$(EMHOME)/h $(MACHFL)" head_$(PREF).$(SUF) - -tail: lib - -tailcp: tail - ../../install $(OLIB) - rm -f $(OLIB) - -lib: - MACH=$(MACH) MACHFL="$(MACHFL) -LIB" ASAR=$(ASAR) SUF=$(SUF) \ - OLIB=$(OLIB) MakeArch -o - -ar aal arch: - @rm -f OLIST - @sed 's/\.[ce]/.$(SUF)/' < LIST | sed '/\.h/D' > OLIST - make -r -f ../make.proto "CC=$(MACH)" "CFLAGS=$(MACHFL)" `cat OLIST` - -# arch doesn't work recursively, tar does, which is what we actually want -tar: - @rm -f OLIST - make `cat LIST` - cp LIST OLIST diff --git a/lang/cem/libcc.ansi/ctype/ctype.c b/lang/cem/libcc.ansi/ctype/ctype.c deleted file mode 100644 index f298d403b..000000000 --- a/lang/cem/libcc.ansi/ctype/ctype.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * ctype.c - character handling - */ -/* $Header$ */ - -int isalnum(int c); /* Alpha numeric character */ -int isalpha(int c); /* Alpha character */ -int iscntrl(int c); /* Control character */ -int isdigit(int c); /* Digit character */ -int isgraph(int c); /* Graphical character */ -int islower(int c); /* Lower case character */ -int isprint(int c); /* Printable character */ -int ispunct(int c); /* Punctuaction character */ -int isspace(int c); /* Space character */ -int isupper(int c); /* Upper case character */ -int isxdigit(int c); /* Hexdecimal digit character */ - -int tolower(int c); /* Convert to lower case character */ -int toupper(int c); /* Convert to upper case character */ - -int isalnum(int c) { /* Alpha numeric character */ - return isdigit(c) || isalpha(c); -} - -int isalpha(int c) { /* Alpha character */ - return isupper(c) || islower(c); -} - -int iscntrl(int c) { /* Control character */ - return (c >= 0 && c <= 0x1f) || c == 0x7f; -} - -int isdigit(int c) { /* Digit character */ - return (unsigned)(c - '0') < 10; -} - -int isgraph(int c) { /* Graphical character */ - return isprint(c) && c != ' '; -} - -int islower(int c) { /* Lower case character */ - return (unsigned)(c - 'a') < 26; -} - -int isprint(int c) { /* Printable character */ - return c > ' ' && c < 0x7f; -} - -int ispunct(int c) { /* Punctuation character */ - return isprint(c) && !(c == ' ' || isalnum(c)); -} - -int isspace(int c) { /* Space character */ - return c == ' ' || c == '\f' || c == '\n' || - c == '\r' || c == '\t' || c == '\v'; -} - -int isupper(int c) { /* Upper case character */ - return (unsigned)(c - 'A') < 26; -} - -int isxdigit(int c) { /* Hexdecimal digit character */ - return isdigit(c) || - (c >= 'A' && c <= 'F') || - (c >= 'a' && c <= 'f'); -} - -int tolower(int c) { /* Convert to lower case character */ - if (!isupper(c)) return c; - else return c - 'A' + 'a'; -} - -int toupper(int c) { /* Convert to upper case character */ - if (!islower(c)) return c; - else return c - 'a' + 'A'; -} diff --git a/lang/cem/libcc.ansi/ctype/genfiles.c b/lang/cem/libcc.ansi/ctype/genfiles.c deleted file mode 100644 index 06fa7faab..000000000 --- a/lang/cem/libcc.ansi/ctype/genfiles.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#if __STDC__ == 1 -#include -#include -#else -#define EXIT_SUCCESS 0 -#define EXIT_FAILURE 1 -#endif - -#define UCHAR_MAX 256 - -char *functab[] = { - "isalnum", - "isalpha", - "iscntrl", - "isdigit", - "isgraph", - "islower", - "isprint", - "ispunct", - "isspace", - "isupper", - "isxdigit", - "isascii", - "toupper", - "tolower", - NULL, -}; - -char buf[100]; - -int -main() -{ - register char **name; - register int i; - FILE *file; - - name = functab; - while (*name) { - strcpy(buf, *name); - strcat(buf, ".c"); - if (!(file = fopen(buf,"w"))) exit(EXIT_FAILURE); - fprintf(file,"int (%s)(int c) {\n", *name); - fprintf(file,"\treturn %s(c);\n", *name); - fprintf(file,"}\n"); - fclose(file); - name++; - } - exit(EXIT_SUCCESS); -} diff --git a/lang/cem/libcc.ansi/errno/errno.c b/lang/cem/libcc.ansi/errno/errno.c deleted file mode 100644 index afe0a50ed..000000000 --- a/lang/cem/libcc.ansi/errno/errno.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * errno.h - error codes - * - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header */ - -#include - -int errno = 0; diff --git a/lang/cem/libcc.ansi/headers/sgtty.h b/lang/cem/libcc.ansi/headers/sgtty.h deleted file mode 100644 index 6e2295f5d..000000000 --- a/lang/cem/libcc.ansi/headers/sgtty.h +++ /dev/null @@ -1,72 +0,0 @@ -/* $Header$ */ - -#if !defined(_SGTTY_H) -#define _SGTTY_H -/* Data structures for IOCTL. */ - -struct sgttyb { - char sg_ispeed; /* input speed */ - char sg_ospeed; /* output speed */ - char sg_erase; /* erase character */ - char sg_kill; /* kill character */ -#if defined(__USG) && !defined(_XENIX) - int sg_flags; /* mode flags */ -#else - short sg_flags; /* mode flags */ -#endif -}; - -struct tchars { - char t_intrc; /* SIGINT char */ - char t_quitc; /* SIGQUIT char */ - char t_startc; /* start output (initially CTRL-Q) */ - char t_stopc; /* stop output (initially CTRL-S) */ - char t_eofc; /* EOF (initially CTRL-D) */ - char t_brkc; /* input delimiter (like nl) */ -}; - -/* Field names */ -#if defined(__USG) && !defined(_XENIX) -#define XTABS 0000002 /* do tab expansion */ -#else -#define XTABS 0006000 /* do tab expansion */ -#endif -#define EVENP 0000200 /* even parity */ -#define ODDP 0000100 /* odd parity */ -#define RAW 0000040 /* enable raw mode */ -#define CRMOD 0000020 /* map lf to cr + lf */ -#define ECHO 0000010 /* echo input */ -#define LCASE 0000004 /* map upper case to lower on input */ -#define CBREAK 0000002 /* enable cbreak mode */ -#if defined(__BSD4_2) || defined(_XENIX) -#define TANDEM 0000001 /* automatic flow control */ -#else -#define HUPCL 0000001 /* unused ??? */ -#endif -#define COOKED 0000000 /* neither CBREAK nor RAW */ - -#define B0 0 -#define B50 1 -#define B75 2 -#define B110 3 -#define B134 4 -#define B150 5 -#define B200 6 -#define B300 7 -#define B600 8 -#define B1200 9 -#define B1800 10 -#define B2400 11 -#define B4800 12 -#define B9600 13 -#define B19200 14 -#define B38400 15 -#define EXTA 14 -#define EXTB 15 - -#define TIOCGETP (('t'<<8) | 8) -#define TIOCSETP (('t'<<8) | 9) -#define TIOCGETC (('t'<<8) | 18) -#define TIOCSETC (('t'<<8) | 17) - -#endif /* _SGTTY_H */ diff --git a/lang/cem/libcc.ansi/headers/sys/stat.h b/lang/cem/libcc.ansi/headers/sys/stat.h deleted file mode 100644 index 802f2a31f..000000000 --- a/lang/cem/libcc.ansi/headers/sys/stat.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -#if !defined(_SYS_STAT_H) -#define _SYS_STAT_H - -struct stat { - dev_t st_dev; - ino_t st_ino; - u_short st_mode; - short st_nlink; - short st_uid; - short st_gid; - dev_t st_rdev; - off_t st_size; - time_t st_atime; -#if defined(__BSD4_2) - long st_spare1; -#endif - time_t st_mtime; -#if defined(__BSD4_2) - long st_spare2; -#endif - time_t st_ctime; -#if defined(__BSD4_2) - long st_spare3; - long st_blksize; - long st_blocks; - long st_spare4[2]; -#endif -}; - -#define S_IFMT 0170000 -#define S_IFDIR 0040000 -#define S_IFCHR 0020000 -#define S_IFBLK 0060000 -#define S_IFREG 0100000 -#if !defined(__BSD4_2) -#if !defined(__USG) && !defined(_POSIX_SOURCE) -#define S_IFMPC 0030000 -#define S_IFMPB 0070000 -#else -#define S_IFIFO 0010000 -#endif -#else -#define S_IFLNK 0120000 -#define S_IFSOCK 0140000 -#endif -#define S_ISUID 0004000 -#define S_ISGID 0002000 -#define S_ISVTX 0001000 -#define S_IREAD 0000400 -#define S_IWRITE 0000200 -#define S_IEXEC 0000100 - -#if defined(__BSD4_2) || defined(_POSIX_SOURCE) -#define S_IRWXU 00700 /* owner: rwx------ */ -#define S_IRUSR 00400 /* owner: r-------- */ -#define S_IWUSR 00200 /* owner: -w------- */ -#define S_IXUSR 00100 /* owner: --x------ */ - -#define S_IRWXG 00070 /* group: ---rwx--- */ -#define S_IRGRP 00040 /* group: ---r----- */ -#define S_IWGRP 00020 /* group: ----w---- */ -#define S_IXGRP 00010 /* group: -----x--- */ - -#define S_IRWXO 00007 /* others: ------rwx */ -#define S_IROTH 00004 /* others: ------r-- */ -#define S_IWOTH 00002 /* others: -------w- */ -#define S_IXOTH 00001 /* others: --------x */ - -#if defined(_POSIX_SOURCE) -/* The following macros test st_mode (from POSIX Sec. 5.6.1.1.) */ -#define S_ISREG(m) ((m & S_IFMT) == S_IFREG) /* is a reg file */ -#define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR) /* is a directory */ -#define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR) /* is a char spec */ -#define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK) /* is a block spec */ -#define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO) /* is a pipe/FIFO */ -#endif /* _POSIX_SOURCE */ -#endif /* BSD4_2 || _POSIX_SOURCE */ - -#endif /* _SYS_STAT_H */ diff --git a/lang/cem/libcc.ansi/headers/sys/types.h b/lang/cem/libcc.ansi/headers/sys/types.h deleted file mode 100644 index 9004c0939..000000000 --- a/lang/cem/libcc.ansi/headers/sys/types.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* - * Basic system types and major/minor device constructing/busting macros. - */ -/* $Header$ */ - -#if !defined(_SYS_TYPES_H) -#define _SYS_TYPES_H - -#if !defined(_SIZE_T) -#define _SIZE_T -typedef unsigned int size_t; /* type returned by sizeof */ -#endif /* _SIZE_T */ - -#if !defined(_TIME_T) -#define _TIME_T -typedef unsigned long time_t; -#endif /* TIME_T */ - -#if !defined(_POSIX_SOURCE) - -/* major part of a device */ -#define major(x) ((int)(((unsigned)(x)>>8)&0377)) - -/* minor part of a device */ -#define minor(x) ((int)((x)&0377)) - -/* make a device number */ -#define makedev(x,y) ((dev_t)(((x)<<8) | (y))) - -typedef unsigned char u_char; -typedef unsigned short u_short; -typedef unsigned int u_int; -typedef unsigned long u_long; - -typedef struct _physadr { int r[1]; } *physadr; -typedef long daddr_t; -typedef char * caddr_t; -#if defined(__BSD4_2) -typedef u_long ino_t; -#else -typedef u_short ino_t; -#endif -typedef long swblk_t; - -typedef long label_t[14]; -typedef short dev_t; -#if defined(__BSD4_2) -typedef int off_t; /* see lseek(2) */ -#else -typedef long off_t; -#endif - -/* system V compatibility: */ -typedef unsigned int uint; -typedef unsigned short ushort; -typedef unsigned char uchar_t; -typedef short cnt_t; -typedef long paddr_t; -typedef long key_t; -#else /* _POSIX_SOURCE */ -#if defined(_MINIX) -typedef unsigned short dev_t; /* hold (major|minor) device pair */ -typedef unsigned char gid_t; /* group id */ -typedef unsigned short ino_t; /* i-node number */ -typedef unsigned short mode_t; /* mode number within an i-node */ -typedef unsigned char nlink_t; /* number-of-links field within an i-node */ -typedef long off_t; /* offsets within a file */ -typedef int pid_t; /* type for pids (must be signed) */ -typedef unsigned short uid_t; /* user id */ -#endif /* _MINIX */ -#endif /* _POSIX_SOURCE */ - -#endif /* _SYS_TYPES_H */ diff --git a/lang/cem/libcc.ansi/make.proto b/lang/cem/libcc.ansi/make.proto deleted file mode 100644 index f15130c25..000000000 --- a/lang/cem/libcc.ansi/make.proto +++ /dev/null @@ -1,6 +0,0 @@ -.SUFFIXES: .o .e .c .m .s - -.c.o .e.o .c.m .e.m .c.s .e.s: - $(CC) $(CFLAGS) -c $< - -fake: diff --git a/lang/cem/libcc.ansi/math/cosh.c b/lang/cem/libcc.ansi/math/cosh.c deleted file mode 100644 index 89456e765..000000000 --- a/lang/cem/libcc.ansi/math/cosh.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Ceriel J.H. Jacobs - */ -/* $Header$ */ - -#include -#include -#include "localmath.h" - -double -cosh(double x) -{ - if (x < 0) { - x = -x; - } - if (x > M_LN_MAX_D) { - /* exp(x) would overflow */ - if (x >= M_LN_MAX_D + M_LN2) { - /* not representable */ - x = HUGE_VAL; - errno = ERANGE; - } - else x = exp (x - M_LN2); - } - else { - double expx = exp(x); - x = 0.5 * (expx + 1.0/expx); - } - return x; -} diff --git a/lang/cem/libcc.ansi/stdio/gcvt.c b/lang/cem/libcc.ansi/stdio/gcvt.c deleted file mode 100644 index 5cfa750da..000000000 --- a/lang/cem/libcc.ansi/stdio/gcvt.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * gcvt.c - conversion for printing a floating point number - */ -/* $Header$ */ - -#ifndef NOFLOAT -#include "loc_incl.h" - -#define NDIGINEXP(exp) (((exp) >= 100 || (exp) <= -100) ? 3 : 2) -#define LOW_EXP -4 -#define USE_EXP(exp, ndigits) (((exp) < LOW_EXP + 1) || (exp >= ndigits + 1)) - -char * -_gcvt(long double value, int ndigit, char *s, int flags) -{ - int sign, dp; - register char *s1, *s2; - register int i; - register int nndigit = ndigit; - - s1 = _ecvt(value, ndigit, &dp, &sign); - s2 = s; - if (sign) *s2++ = '-'; - else if (flags & FL_SIGN) - *s2++ = '+'; - else if (flags & FL_SPACE) - *s2++ = ' '; - - if (!(flags & FL_ALT)) - for (i = nndigit - 1; i > 0 && s1[i] == '0'; i--) - nndigit--; - - if (USE_EXP(dp,ndigit)) { - /* Use E format */ - dp--; - *s2++ = *s1++; - if ((nndigit > 1) || (flags & FL_ALT)) *s2++ = '.'; - while (--nndigit > 0) *s2++ = *s1++; - *s2++ = 'e'; - if (dp < 0) { - *s2++ = '-'; - dp = -dp; - } - else *s2++ = '+'; - s2 += NDIGINEXP(dp); - *s2 = 0; - for (i = NDIGINEXP(dp); i > 0; i--) { - *--s2 = dp % 10 + '0'; - dp /= 10; - } - return s; - } - /* Use f format */ - if (dp <= 0) { - if (*s1 != '0') { - /* otherwise the whole number is 0 */ - *s2++ = '0'; - *s2++ = '.'; - } - while (dp < 0) { - dp++; - *s2++ = '0'; - } - } - for (i = 1; i <= nndigit; i++) { - *s2++ = *s1++; - if (i == dp) *s2++ = '.'; - } - if (i <= dp) { - while (i++ <= dp) *s2++ = '0'; - *s2++ = '.'; - } - if ((s2[-1]=='.') && !(flags & FL_ALT)) s2--; - *s2 = '\0'; - return s; -} -#endif /* NOFLOAT */ diff --git a/lang/cem/libcc.ansi/stdlib/calloc.c b/lang/cem/libcc.ansi/stdlib/calloc.c deleted file mode 100644 index 90c664ce7..000000000 --- a/lang/cem/libcc.ansi/stdlib/calloc.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -#include - -#define ALIGN(sz) (((sz)+(sizeof(long)-1)/sizeof(long))*sizeof(long)) - -void * -calloc(size_t nelem, size_t elsize) -{ - register void *p; - register long *q; - unsigned int size = ALIGN(nelem * elsize); - - if ((p = malloc(size)) == (void *)NULL) - return (void *)NULL; - /* "The space is intialized to all bits zero" */ - q = (long *) (p + size); - while ((void *) q > p) *--q = 0; - return p; -} diff --git a/lang/cem/libcc.ansi/stdlib/malloc.c b/lang/cem/libcc.ansi/stdlib/malloc.c deleted file mode 100644 index 0015f510d..000000000 --- a/lang/cem/libcc.ansi/stdlib/malloc.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -#include - -#define CLICK_SIZE 4096 - -#if EM_WSIZE == EM_PSIZE -typedef unsigned int vir_bytes; -#else -typedef long vir_bytes; -#endif - - -#define ALIGN(x, a) (((x) + (a - 1)) & ~(a - 1)) -#define BUSY 1 -#define NEXT(p) (* (void **) (p)) - -#ifdef pdp -#define BUGFIX 64 /* cannot set break in top 64 bytes */ -#else -#define BUGFIX 0 -#endif - -extern void bcopy(void *, void *, size_t); -extern void *sbrk(unsigned int); -extern void *brk(unsigned int); -static void *bottom, *top; - -static int -grow(size_t len) -{ - register void *p; - register int click = CLICK_SIZE; - - p = sbrk(0); - len += (void *) ALIGN((vir_bytes) p, sizeof(void *)) - p; - while (click >= 4) { - size_t len1 = ALIGN((vir_bytes)p+len+sizeof(char *),click)-(vir_bytes)p; - void *p1 = p; - - if (p + len1 + BUGFIX < p || (p1 = sbrk(len1)) == (void *) -1) { - click >>= 1; - continue; - } - p = p1; - if (top + sizeof(void *) != p) { - /* someone else has done an sbrk */ - NEXT(top) = (void *) ((vir_bytes) p | BUSY); - } else { - for (p = bottom; NEXT(p) != NULL; p = (void *) (* (vir_bytes *) p & ~BUSY)) - ; - } - top = p + len1 - sizeof(void *); - NEXT(p) = top; - NEXT(top) = NULL; - return 1; - } - return 0; -} - -void * -malloc(size_t size) -{ - register void *p, *next, *new; - register size_t len = ALIGN(size, sizeof(void *)) + sizeof(void *); - - if ((p = bottom) == NULL) { - p = sbrk(sizeof(void *)); - sbrk((void *) ALIGN((vir_bytes) p, sizeof(void *)) - p); - p = (void *) ALIGN((vir_bytes) p, sizeof(void *)); - top = bottom = p; - NEXT(p) = NULL; - } - while ((next = NEXT(p)) != NULL) - if ((vir_bytes) next & BUSY) /* already in use */ - p = (void *) ((vir_bytes) next & ~BUSY); - else { - while ((new = NEXT(next)) != NULL - && !((vir_bytes) new & BUSY)) - next = new; - if (next - p >= len) { /* fits */ - if ((new = p + len) < next) /* too big */ - NEXT(new) = next; - NEXT(p) = (void *) ((vir_bytes) new | BUSY); - return(p + sizeof(void *)); - } - p = next; - } - return grow(len) ? malloc(size) : (void *)NULL; -} - -void * -realloc(void *old, size_t size) -{ - register void *p = old - sizeof(void *), *next, *new; - register size_t len = ALIGN(size, sizeof(void *)) + sizeof(void *), n; - - next = (void *) (* (vir_bytes *) p & ~BUSY); - n = next - old; /* old size */ - while ((new = NEXT(next)) != NULL && !((vir_bytes) new & BUSY)) - next = new; - if (next - p >= len) { /* does it still fit */ - if ((new = p + len) < next) { /* even too big */ - NEXT(new) = next; - NEXT(p) = (void *) ((vir_bytes) new | BUSY); - } - else - NEXT(p) = (void *) ((vir_bytes) next | BUSY); - return(old); - } - if ((new = malloc(size)) == NULL) /* it didn't fit */ - return((void *)NULL); - bcopy(old, new, n); /* n < size */ - * (vir_bytes *) p &= ~BUSY; - return(new); -} - -void -free(void *p) -{ - if (p != (void *)NULL) - *(vir_bytes *) (p - sizeof(void *)) &= ~BUSY; -} diff --git a/lang/cem/libcc.ansi/time/loc_incl.h b/lang/cem/libcc.ansi/time/loc_incl.h deleted file mode 100644 index 5ccbb4c5e..000000000 --- a/lang/cem/libcc.ansi/time/loc_incl.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * loc_incl.h - some local definitions - */ -/* $Header$ */ - -#define YEAR0 1900 /* the first year */ -#define EPOCH_YR 1970 /* EPOCH = Jan 1 1970 00:00:00 */ -#define SECS_DAY (24L * 60L * 60L) -#define LEAPYEAR(year) (!((year) % 4) && (((year) % 100) || !((year) % 400))) -#define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365) -#define FIRSTSUNDAY(timp) (((timp)->tm_yday - (timp)->tm_wday + 420) % 7) -#define FIRSTDAYOF(timp) (((timp)->tm_wday - (timp)->tm_yday + 420) % 7) -#define TIME_MAX ULONG_MAX -#define ABB_LEN 3 - -extern const int _ytab[2][12]; -extern const char *_days[]; -extern const char *_months[]; - -void _tzset(void); -unsigned _dstget(struct tm *timep); - -extern long _timezone; -extern long _dst_off; -extern int _daylight; -extern char *_tzname[2]; diff --git a/lang/cem/libcc/gen/getopt.c b/lang/cem/libcc/gen/getopt.c deleted file mode 100644 index 7e4b0d3dd..000000000 --- a/lang/cem/libcc/gen/getopt.c +++ /dev/null @@ -1,58 +0,0 @@ -/* $Header$ */ -#include -#define ERR(s, c) if(opterr){\ - fputs(argv[0], stderr);\ - fputs(s, stderr);\ - fputc(c, stderr);\ - fputc('\n', stderr);} - -int opterr = 1; -int optind = 1; -int optopt; -char *optarg; -char *index(); - -int -getopt (argc, argv, opts) -char **argv, *opts; -{ - static int sp = 1; - register c; - register char *cp; - - if (sp == 1) - if (optind >= argc || - argv[optind][0] != '-' || argv[optind][1] == '\0') - return EOF; - else if (strcmp(argv[optind], "--") == NULL) { - optind++; - return EOF; - } - optopt = c = argv[optind][sp]; - if (c == ':' || (cp=index(opts, c)) == NULL) { - ERR (": illegal option -- ", c); - if (argv[optind][++sp] == '\0') { - optind++; - sp = 1; - } - return '?'; - } - if (*++cp == ':') { - if (argv[optind][sp+1] != '\0') - optarg = &argv[optind++][sp+1]; - else if (++optind >= argc) { - ERR (": option requires an argument -- ", c); - sp = 1; - return '?'; - } else - optarg = argv[optind++]; - sp = 1; - } else { - if (argv[optind][++sp] == '\0') { - sp = 1; - optind++; - } - optarg = NULL; - } - return c; -} diff --git a/lang/cem/libcc/math/cosh.c b/lang/cem/libcc/math/cosh.c deleted file mode 100644 index 4cecd4e5f..000000000 --- a/lang/cem/libcc/math/cosh.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Ceriel J.H. Jacobs - */ - -/* $Header$ */ - -#include -#include - -extern int errno; - -double -cosh(x) - double x; -{ - extern double exp(); - - if (x < 0) { - x = -x; - } - if (x > M_LN_MAX_D) { - /* exp(x) would overflow */ - if (x >= M_LN_MAX_D + M_LN2) { - /* not representable */ - x = HUGE; - errno = ERANGE; - } - else x = exp (x - M_LN2); - } - else { - double expx = exp(x); - x = 0.5 * (expx + 1.0/expx); - } - return x; -} diff --git a/lang/m2/comp/Parameters b/lang/m2/comp/Parameters deleted file mode 100644 index a05f79a4b..000000000 --- a/lang/m2/comp/Parameters +++ /dev/null @@ -1,78 +0,0 @@ -!File: errout.h -#define ERROUT STDERR /* file pointer for writing messages */ -#define MAXERR_LINE 100 /* maximum number of error messages given - on the same input line. */ - - -!File: idfsize.h -#define IDFSIZE 128 /* maximum significant length of an identifier */ - - -!File: numsize.h -#define NUMSIZE 256 /* maximum length of a numeric constant */ - - -!File: strsize.h -#define ISTRSIZE 32 /* minimum number of bytes allocated for - storing a string */ -#define RSTRSIZE 8 /* step size in enlarging the memory for - the storage of a string */ - - -!File: target_sizes.h -#define MAXSIZE 8 /* the maximum of the SZ_* constants */ - -/* target machine sizes */ -#define SZ_CHAR ((arith)1) -#define SZ_SHORT ((arith)2) -#define SZ_WORD ((arith)4) -#define SZ_INT ((arith)4) -#define SZ_LONG ((arith)4) -#define SZ_FLOAT ((arith)4) -#define SZ_DOUBLE ((arith)8) -#define SZ_POINTER ((arith)4) - -/* target machine alignment requirements */ -#define AL_CHAR 1 -#define AL_SHORT ((int)SZ_SHORT) -#define AL_WORD ((int)SZ_WORD) -#define AL_INT ((int)SZ_WORD) -#define AL_LONG ((int)SZ_WORD) -#define AL_FLOAT ((int)SZ_WORD) -#define AL_DOUBLE ((int)SZ_WORD) -#define AL_POINTER ((int)SZ_WORD) -#define AL_STRUCT ((int)SZ_WORD) - - -!File: debugcst.h -#define DEBUG 1 /* perform various self-tests */ - -!File: inputtype.h -#define INP_READ_IN_ONE 1 /* read input file in one */ - - -!File: density.h -#define DENSITY 3 /* see casestat.C for an explanation */ - - -!File: squeeze.h -#undef SQUEEZE 1 /* define on "small" machines */ - - -!File: strict3rd.h -#undef STRICT_3RD_ED 1 /* define on "small" machines, and if you want - a compiler that only implements "3rd edition" - Modula-2 - */ - - -!File: nocross.h -#undef NOCROSS 1 /* define when cross-compiler not needed */ - - -!File: nostrict.h -#undef NOSTRICT 1 /* define when STRICT warnings disabled - (yet another squeezing method) - */ - - diff --git a/lang/m2/comp/Resolve b/lang/m2/comp/Resolve deleted file mode 100755 index e64381d5e..000000000 --- a/lang/m2/comp/Resolve +++ /dev/null @@ -1,60 +0,0 @@ -: create a directory Xsrc with name clashes resolved -: and run make in that directory -: '$Header$' - -case $# in -1) - ;; -*) echo "$0: one argument expected" 1>&2 - exit 1 - ;; -esac -PW=`pwd` -case $1 in -main) target=$PW/$1 - ;; -omain) target=$PW/$1 - options=-DPEEPHOLE - ;; -cemain) target=$PW/$1 - options=-DCODE_EXPANDER - ;; -Xlint) target=$1 - ;; -*) echo "$0: $1: Illegal argument" 1>&2 - exit 1 - ;; -esac -if test -d ../Xsrc -then - : -else mkdir ../Xsrc -fi -make EMHOME=$EMHOME longnames -: remove code generating routines from the clashes list as they are defines. -: code generating routine names start with C_ -sed '/^C_/d' < longnames > tmp$$ -cclash -c -l7 tmp$$ > ../Xsrc/Xclashes -rm -f tmp$$ -cd ../Xsrc -if cmp -s Xclashes clashes -then - : -else - mv Xclashes clashes -fi -rm -f Makefile -ed - $PW/Makefile <<'EOF' -/^#EXCLEXCL/,/^#INCLINCL/d -w Makefile -q -EOF -for i in `cat $PW/Cfiles` -do - cat >> Makefile < $i -EOF -done -make EMHOME=$EMHOME COPTIONS=$options MACH=$MACH CURRDIR=$PW/ $target diff --git a/lang/m2/comp/Version.c b/lang/m2/comp/Version.c deleted file mode 100644 index 55fe3cedd..000000000 --- a/lang/m2/comp/Version.c +++ /dev/null @@ -1 +0,0 @@ -static char Version[] = "ACK Modula-2 compiler Version 0.50"; diff --git a/lang/m2/comp/const.h b/lang/m2/comp/const.h deleted file mode 100644 index 4aa261a63..000000000 --- a/lang/m2/comp/const.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Ceriel J.H. Jacobs - */ - -/* C O N S T A N T S F O R E X P R E S S I O N H A N D L I N G */ - -/* $Header$ */ - -#define arith_sign ((arith) (1L << (sizeof(arith) * 8 - 1))) - -extern unsigned int - wrd_bits; /* Number of bits in a word */ diff --git a/lang/m2/comp/def_sizes.h b/lang/m2/comp/def_sizes.h deleted file mode 100644 index a8543f8b2..000000000 --- a/lang/m2/comp/def_sizes.h +++ /dev/null @@ -1,22 +0,0 @@ -/* D E F A U L T S I Z E S A N D A L I G N M E N T S */ - -/* $Header$ */ - -#define MAXSIZE 8 /* the maximum of the SZ_* constants */ -/* target machine sizes */ -#define SZ_CHAR (arith)1 -#define SZ_WORD (arith)4 -#define SZ_INT (arith)4 -#define SZ_LONG (arith)4 -#define SZ_FLOAT (arith)4 -#define SZ_DOUBLE (arith)8 -#define SZ_POINTER (arith)4 -/* target machine alignment requirements */ -#define AL_CHAR 1 -#define AL_WORD (int) SZ_WORD -#define AL_INT (int) SZ_WORD -#define AL_LONG (int) SZ_WORD -#define AL_FLOAT (int) SZ_WORD -#define AL_DOUBLE (int) SZ_WORD -#define AL_POINTER (int) SZ_WORD -#define AL_STRUCT 1 diff --git a/lang/m2/comp/desig.H b/lang/m2/comp/desig.H deleted file mode 100644 index 994568180..000000000 --- a/lang/m2/comp/desig.H +++ /dev/null @@ -1,69 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Ceriel J.H. Jacobs - */ - -/* D E S I G N A T O R D E S C R I P T I O N S */ - -/* $Header$ */ - -/* Generating code for designators is not particularly easy, especially if - you don't know wether you want the address or the value. - The next structure is used to generate code for designators. - It contains information on how to find the designator, after generation - of the code that is common to both address and value computations. -*/ - -struct desig { - short dsg_kind; -#define DSG_INIT 0 /* don't know anything yet */ -#define DSG_LOADED 1 /* designator loaded on top of the stack */ -#define DSG_PLOADED 2 /* designator accessible through pointer on - stack, possibly with an offset - */ -#define DSG_FIXED 3 /* designator directly accessible */ -#define DSG_PFIXED 4 /* designator accessible through directly - accessible pointer - */ -#define DSG_INDEXED 5 /* designator accessible through array - operation. Address of array descriptor on - top of the stack, index beneath that, and - base address beneath that - */ - arith dsg_offset; /* contains an offset for PLOADED, - or for FIXED or PFIXED it contains an - offset from dsg_name, if it exists, - or from the current Local Base - */ - char *dsg_name; /* name of global variable, used for - FIXED and PFIXED - */ - struct def *dsg_def; /* def structure associated with this - designator, or 0 - */ -}; - -typedef struct desig t_desig; - -/* ALLOCDEF "desig" 5 */ - -/* The next structure describes the designator in a with-statement. - We have a linked list of them, as with-statements may be nested. -*/ - -struct withdesig { - struct withdesig *w_next; - int w_flags; /* D_USED|D_DEFINED */ - struct scope *w_scope; /* scope in which fields of this record - reside - */ - t_desig w_desig; /* a desig structure for this particular - designator - */ -}; - -extern struct withdesig *WithDesigs; - -#define NO_LABEL ((label) 0) diff --git a/lang/m2/comp/idlist.H b/lang/m2/comp/idlist.H deleted file mode 100644 index 9d320bb99..000000000 --- a/lang/m2/comp/idlist.H +++ /dev/null @@ -1,12 +0,0 @@ -/* $Header$ */ - -#include - -/* Structure to link idf structures together -*/ -struct id_list { - struct id_list *next; - struct idf *id_ptr; -}; - -/* ALLOCDEF "id_list" */ diff --git a/lang/m2/comp/idlist.c b/lang/m2/comp/idlist.c deleted file mode 100644 index 3b067af2b..000000000 --- a/lang/m2/comp/idlist.c +++ /dev/null @@ -1,20 +0,0 @@ -static char *RcsId = "$Header$"; - -#include "idf.h" -#include "idlist.h" - -struct id_list *h_id_list; /* Header of free list */ - -/* FreeIdList: take a list of id_list structures and put them - on the free list of id_list structures -*/ -FreeIdList(p) - struct id_list *p; -{ - register struct id_list *q; - - while (q = p) { - p = p->next; - free_id_list(q); - } -} diff --git a/lang/m2/comp/misc.H b/lang/m2/comp/misc.H deleted file mode 100644 index 4f2ae65e3..000000000 --- a/lang/m2/comp/misc.H +++ /dev/null @@ -1,10 +0,0 @@ -/* M I S C E L L A N E O U S */ - -/* $Header$ */ - -/* ALLOCDEF "id_list" */ - -#define is_anon_idf(x) ((x)->id_text[0] == '#') - -extern struct idf - *gen_anon_idf(); diff --git a/lang/m2/comp/nmclash.c b/lang/m2/comp/nmclash.c deleted file mode 100644 index ca2567a80..000000000 --- a/lang/m2/comp/nmclash.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Accepted if many characters of long names are significant */ -abcdefghijklmnopr() { } -abcdefghijklmnopq() { } -main() { } diff --git a/lang/m2/comp/param.h b/lang/m2/comp/param.h deleted file mode 100644 index cd4d2cba4..000000000 --- a/lang/m2/comp/param.h +++ /dev/null @@ -1,4 +0,0 @@ -/* $Header$ */ - -#define IDFSIZE 256 -#define NUMSIZE 256 diff --git a/lang/m2/comp/print.c b/lang/m2/comp/print.c deleted file mode 100644 index ffb1a725d..000000000 --- a/lang/m2/comp/print.c +++ /dev/null @@ -1,144 +0,0 @@ -/* P R I N T R O U T I N E S */ - -#include -#include - -#define SSIZE 1024 /* string-buffer size for print routines */ - -char *long2str(); - -doprnt(fp, fmt, argp) - File *fp; - char *fmt; - int argp[]; -{ - char buf[SSIZE]; - - sys_write(fp, buf, format(buf, fmt, (char *)argp)); -} - -/*VARARGS1*/ -printf(fmt, args) - char *fmt; - char args; -{ - char buf[SSIZE]; - - sys_write(STDOUT, buf, format(buf, fmt, &args)); -} - -/*VARARGS1*/ -fprintf(fp, fmt, args) - File *fp; - char *fmt; - char args; -{ - char buf[SSIZE]; - - sys_write(fp, buf, format(buf, fmt, &args)); -} - -/*VARARGS1*/ -char * -sprintf(buf, fmt, args) - char *buf, *fmt; - char args; -{ - buf[format(buf, fmt, &args)] = '\0'; - return buf; -} - -int -format(buf, fmt, argp) - char *buf, *fmt; - char *argp; -{ - register char *pf = fmt, *pa = argp; - register char *pb = buf; - - while (*pf) { - if (*pf == '%') { - register int width, base, pad, npad; - char *arg; - char cbuf[2]; - char *badformat = ""; - - /* get padder */ - if (*++pf == '0') { - pad = '0'; - ++pf; - } - else - pad = ' '; - - /* get width */ - width = 0; - while (*pf >= '0' && *pf <= '9') - width = 10 * width + *pf++ - '0'; - - /* get text and move pa */ - if (*pf == 's') { - arg = *(char **)pa; - pa += sizeof(char *); - } - else - if (*pf == 'c') { - cbuf[0] = * (char *) pa; - cbuf[1] = '\0'; - pa += sizeof(int); - arg = &cbuf[0]; - } - else - if (*pf == 'l') { - /* alignment ??? */ - if (base = integral(*++pf)) { - arg = long2str(*(long *)pa, base); - pa += sizeof(long); - } - else { - pf--; - arg = badformat; - } - } - else - if (base = integral(*pf)) { - arg = long2str((long)*(int *)pa, base); - pa += sizeof(int); - } - else - if (*pf == '%') - arg = "%"; - else - arg = badformat; - - npad = width - strlen(arg); - - while (npad-- > 0) - *pb++ = pad; - - while (*pb++ = *arg++); - pb--; - pf++; - } - else - *pb++ = *pf++; - } - return pb - buf; -} - -integral(c) -{ - switch (c) { - case 'b': - return -2; - case 'd': - return 10; - case 'o': - return -8; - case 'u': - return -10; - case 'x': - return -16; - } - return 0; -} diff --git a/lang/m2/comp/tab.c b/lang/m2/comp/tab.c deleted file mode 100644 index 17065cf9b..000000000 --- a/lang/m2/comp/tab.c +++ /dev/null @@ -1,295 +0,0 @@ -/* @cc tab.c -o $INSTALLDIR/tab@ - tab - table generator - - Author: Erik Baalbergen (..tjalk!erikb) -*/ - -#include - -static char *RcsId = "$Header$"; - -#define MAXTAB 10000 -#define MAXBUF 10000 -#define COMCOM '-' -#define FILECOM '%' - -int InputForm = 'c'; -char OutputForm[MAXBUF] = "%s,\n"; -int TabSize = 257; -char *Table[MAXTAB]; -char *Name; -char *ProgCall; - -main(argc, argv) - char *argv[]; -{ - ProgCall = *argv++; - argc--; - while (argc-- > 0) { - if (**argv == COMCOM) { - option(*argv++); - } - else { - process(*argv++, InputForm); - } - } -} - -char * -Salloc(s) - char *s; -{ - char *malloc(); - char *ns = malloc(strlen(s) + 1); - - if (ns) { - strcpy(ns, s); - } - return ns; -} - -option(str) - char *str; -{ - /* note that *str indicates the source of the option: - either COMCOM (from command line) or FILECOM (from a file). - */ - switch (*++str) { - - case ' ': /* command */ - case '\t': - case '\0': - break; - case 'I': - InputForm = *++str; - break; - case 'f': - if (*++str == '\0') { - fprintf(stderr, "%s: -f: name expected\n", ProgCall); - exit(1); - } - DoFile(str); - break; - case 'F': - sprintf(OutputForm, "%s\n", ++str); - break; - case 'T': - printf("%s\n", ++str); - break; - case 'p': - PrintTable(); - break; - case 'C': - ClearTable(); - break; - case 'S': - { - register i = stoi(++str); - - if (i <= 0 || i > MAXTAB) { - fprintf(stderr, "%s: size would exceed maximum\n", - ProgCall); - } - else { - TabSize = i; - } - break; - } - default: - fprintf(stderr, "%s: bad option -%s\n", ProgCall, str); - } -} - -ClearTable() -{ - register i; - - for (i = 0; i < MAXTAB; i++) { - Table[i] = 0; - } -} - -PrintTable() -{ - register i; - - for (i = 0; i < TabSize; i++) { - if (Table[i]) { - printf(OutputForm, Table[i]); - } - else { - printf(OutputForm, "0"); - } - } -} - -process(str, format) - char *str; -{ - char *cstr = str; - char *Name = cstr; /* overwrite original string! */ - - /* strip of the entry name - */ - while (*str && *str != ':') { - if (*str == '\\') { - ++str; - } - *cstr++ = *str++; - } - - if (*str != ':') { - fprintf(stderr, "%s: bad specification: \"%s\", ignored\n", - ProgCall, Name); - return 0; - } - *cstr = '\0'; - str++; - - switch (format) { - - case 'c': - return c_proc(str, Name); - default: - fprintf(stderr, "%s: bad input format\n", ProgCall); - } - return 0; -} - -c_proc(str, Name) - char *str; - char *Name; -{ - int ch, ch2; - int quoted(); - - while (*str) { - if (*str == '\\') { - ch = quoted(&str); - } - else { - ch = *str++; - } - if (*str == '-') { - if (*++str == '\\') { - ch2 = quoted(&str); - } - else { - if (ch2 = *str++); - else str--; - } - if (ch > ch2) { - fprintf(stderr, "%s: bad range\n", ProgCall); - return 0; - } - if (ch >= 0 && ch2 <= 255) - while (ch <= ch2) - Table[ch++] = Salloc(Name); - } - else { - if (ch >= 0 && ch <= 255) - Table[ch] = Salloc(Name); - } - } - return 1; -} - -int -quoted(pstr) - char **pstr; -{ - register int ch; - register int i; - register char *str = *pstr; - - if ((*++str >= '0') && (*str <= '9')) { - ch = 0; - for (i = 0; i < 3; i++) { - ch = 8 * ch + *str - '0'; - if (*++str < '0' || *str > '9') - break; - } - } - else { - switch (*str++) { - - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'b': - ch = '\b'; - break; - case 'r': - ch = '\r'; - break; - case 'f': - ch = '\f'; - break; - default : - ch = *str; - } - } - *pstr = str; - return ch & 0377; -} - -int -stoi(str) - char *str; -{ - register i = 0; - - while (*str >= '0' && *str <= '9') { - i = i * 10 + *str++ - '0'; - } - return i; -} - -char * -getline(s, n, fp) - char *s; - FILE *fp; -{ - register c = getc(fp); - char *str = s; - - while (n--) { - if (c == EOF) { - return NULL; - } - else - if (c == '\n') { - *str++ = '\0'; - return s; - } - *str++ = c; - c = getc(fp); - } - s[n - 1] = '\0'; - return s; -} - -#define BUFSIZE 1024 - -DoFile(name) - char *name; -{ - char text[BUFSIZE]; - FILE *fp; - - if ((fp = fopen(name, "r")) == NULL) { - fprintf(stderr, "%s: cannot read file %s\n", ProgCall, name); - exit(1); - } - while (getline(text, BUFSIZE, fp) != NULL) { - if (text[0] == FILECOM) { - option(text); - } - else { - process(text, InputForm); - } - } -} diff --git a/lang/m2/libm2/ASCII.mod b/lang/m2/libm2/ASCII.mod deleted file mode 100644 index 77d932816..000000000 --- a/lang/m2/libm2/ASCII.mod +++ /dev/null @@ -1,3 +0,0 @@ -IMPLEMENTATION MODULE ASCII; -BEGIN -END ASCII. diff --git a/lang/m2/libm2/ChkCards.e b/lang/m2/libm2/ChkCards.e deleted file mode 100644 index 902e6b8e4..000000000 --- a/lang/m2/libm2/ChkCards.e +++ /dev/null @@ -1,131 +0,0 @@ -#include -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: CARDINAL operations with overflow checking -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; - - mes 2,EM_WSIZE,EM_PSIZE - - exp $addu - exp $subu - exp $mulu -#if EM_WSIZE < EM_LSIZE - exp $addul - exp $subul - exp $mulul -#endif - - pro $addu,0 - loc -1 - lol 0 - sbu EM_WSIZE - lol EM_WSIZE - cmu EM_WSIZE - zge *1 - loc M2_UOVFL - trp -1 - lol 0 - lol EM_WSIZE - adu EM_WSIZE - stl EM_WSIZE - ret 0 - end 0 - -#if EM_WSIZE < EM_LSIZE - pro $addul,0 - ldc -1 - ldl 0 - sbu EM_LSIZE - ldl EM_LSIZE - cmu EM_LSIZE - zge *1 - loc M2_UOVFL - trp -1 - ldl 0 - ldl EM_LSIZE - adu EM_LSIZE - sdl EM_LSIZE - ret 0 - end 0 -#endif - - pro $mulu,0 - lol 0 - zeq *1 - loc -1 - lol 0 - dvu EM_WSIZE - lol EM_WSIZE - cmu EM_WSIZE - zge *1 - loc M2_UOVFL - trp -1 - lol 0 - lol EM_WSIZE - mlu EM_WSIZE - stl EM_WSIZE - ret 0 - end 0 - -#if EM_WSIZE < EM_LSIZE - pro $mulul,0 - ldl 0 - ldc 0 - cmu EM_LSIZE - zeq *1 - ldc -1 - ldl 0 - dvu EM_LSIZE - ldl EM_LSIZE - cmu EM_LSIZE - zge *1 - loc M2_UOVFL - trp -1 - ldl 0 - ldl EM_LSIZE - mlu EM_LSIZE - sdl EM_LSIZE - ret 0 - end 0 -#endif - - pro $subu,0 - lol EM_WSIZE - lol 0 - cmu EM_WSIZE - zge *1 - loc M2_UUVFL - trp -1 - lol EM_WSIZE - lol 0 - sbu EM_WSIZE - stl EM_WSIZE - ret 0 - end 0 - -#if EM_WSIZE < EM_LSIZE - pro $subul,0 - ldl EM_LSIZE - ldl 0 - cmu EM_LSIZE - zge *1 - loc M2_UUVFL - trp -1 - ldl EM_LSIZE - ldl 0 - sbu EM_LSIZE - sdl EM_LSIZE - ret 0 - end 0 -#endif diff --git a/lang/m2/libm2/FIFFEF.def b/lang/m2/libm2/FIFFEF.def deleted file mode 100644 index ea49df35a..000000000 --- a/lang/m2/libm2/FIFFEF.def +++ /dev/null @@ -1,13 +0,0 @@ -(*$Foreign*) -DEFINITION MODULE FIFFEF; - - PROCEDURE FIF(arg1, arg2: LONGREAL; VAR intres: LONGREAL) : LONGREAL; - (* multiplies arg1 and arg2, and returns the integer part of the - result in "intres" and the fraction part as the function result. - *) - - PROCEDURE FEF(arg: LONGREAL; VAR exp: INTEGER) : LONGREAL; - (* splits "arg" in mantissa and a base-2 exponent. - The mantissa is returned, and the exponent is left in "exp". - *) -END FIFFEF. diff --git a/lang/m2/libm2/FIFFEF.e b/lang/m2/libm2/FIFFEF.e deleted file mode 100644 index 849cfc2b7..000000000 --- a/lang/m2/libm2/FIFFEF.e +++ /dev/null @@ -1,46 +0,0 @@ -# - mes 2,EM_WSIZE,EM_PSIZE - -#define ARG1 0 -#define ARG2 EM_DSIZE -#define IRES 2*EM_DSIZE - -; FIF is called with three parameters: -; - address of integer part result (IRES) -; - float two (ARG2) -; - float one (ARG1) -; and returns an EM_DSIZE-byte floating point number -; Definition: -; PROCEDURE FIF(ARG1, ARG2: LONGREAL; VAR IRES: LONGREAL) : LONGREAL; - - exp $FIF - pro $FIF,0 - lal 0 - loi 2*EM_DSIZE - fif EM_DSIZE - lal IRES - loi EM_PSIZE - sti EM_DSIZE - ret EM_DSIZE - end ? - -#define FARG 0 -#define ERES EM_DSIZE - -; FEF is called with two parameters: -; - address of base 2 exponent result (ERES) -; - floating point number to be split (FARG) -; and returns an EM_DSIZE-byte floating point number (the mantissa) -; Definition: -; PROCEDURE FEF(FARG: LONGREAL; VAR ERES: integer): LONGREAL; - - exp $FEF - pro $FEF,0 - lal FARG - loi EM_DSIZE - fef EM_DSIZE - lal ERES - loi EM_PSIZE - sti EM_WSIZE - ret EM_DSIZE - end ? diff --git a/lang/m2/libm2/FORchk.c b/lang/m2/libm2/FORchk.c deleted file mode 100644 index f911e2955..000000000 --- a/lang/m2/libm2/FORchk.c +++ /dev/null @@ -1,8 +0,0 @@ -static char m[] = "Warning: FOR-loop control variable was changed in the body"; -_forloopchk(a,b) - unsigned a, b; -{ - if (a != b) { - Traps_Message(m , 0, sizeof(m) - 2, 1); - } -} diff --git a/lang/m2/libm2/Makefile b/lang/m2/libm2/Makefile deleted file mode 100644 index ff3b279e4..000000000 --- a/lang/m2/libm2/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -HOME = ../../.. -DEFDIR = $(HOME)/lib/m2 - -SOURCES = ASCII.def EM.def MathLib0.def Processes.def \ - RealInOut.def Storage.def Arguments.def Conversion.def \ - random.def Semaphores.def Unix.def RealConver.def \ - Strings.def InOut.def Terminal.def \ - Mathlib.def PascalIO.def Traps.def CSP.def \ - Epilogue.def Streams.def ArraySort.def StripUnix.def \ - Termcap.def XXTermcap.def - -all: -clean: -cmp: - -pr: - @pr Makefile $(SOURCES) -opr: - make pr | opr - -install: - -mkdir $(DEFDIR) - cp $(SOURCES) $(DEFDIR) diff --git a/lang/m2/libm2/TTY.def b/lang/m2/libm2/TTY.def deleted file mode 100644 index db60c635c..000000000 --- a/lang/m2/libm2/TTY.def +++ /dev/null @@ -1,3 +0,0 @@ -DEFINITION MODULE TTY; -PROCEDURE isatty(fd: INTEGER): BOOLEAN; -END TTY. diff --git a/lang/m2/libm2/TTY.mod b/lang/m2/libm2/TTY.mod deleted file mode 100644 index f45e5e9fd..000000000 --- a/lang/m2/libm2/TTY.mod +++ /dev/null @@ -1,19 +0,0 @@ -# -(*$R-*) -IMPLEMENTATION MODULE TTY; -FROM Unix IMPORT ioctl; -FROM SYSTEM IMPORT ADR; -PROCEDURE isatty(fd: INTEGER): BOOLEAN; -VAR buf: ARRAY[1..100] OF CHAR; -BEGIN -#ifdef __USG - RETURN ioctl(fd, INTEGER(ORD('T') * 256 + 1), ADR(buf)) >= 0; -#else -#ifdef __BSD4_2 - RETURN ioctl(fd, INTEGER(ORD('t') * 256 + 8 + 6*65536 + 40000000H), ADR(buf)) >= 0; -#else - RETURN ioctl(fd, INTEGER(ORD('t') * 256 + 8), ADR(buf)) >= 0; -#endif -#endif -END isatty; -END TTY. diff --git a/lang/m2/libm2/hol0.e b/lang/m2/libm2/hol0.e deleted file mode 100644 index 8db66cf7e..000000000 --- a/lang/m2/libm2/hol0.e +++ /dev/null @@ -1,29 +0,0 @@ -# - -; $Header$ -; -; (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. -; -; This product is part of the Amsterdam Compiler Kit. -; -; Permission to use, sell, duplicate or disclose this software must be -; obtained in writing. Requests for such permissions may be sent to -; -; Dr. Andrew S. Tanenbaum -; Wiskundig Seminarium -; Vrije Universiteit -; Postbox 7161 -; 1007 MC Amsterdam -; The Netherlands -; -; - - mes 2,EM_WSIZE,EM_PSIZE - -; _hol0 return the address of the ABS block (hol0) - - exp $_hol0 - pro $_hol0,0 - lae 0 - ret EM_PSIZE - end ? diff --git a/lang/m2/libm2/rcka.e b/lang/m2/libm2/rcka.e deleted file mode 100644 index c3ef0b2ab..000000000 --- a/lang/m2/libm2/rcka.e +++ /dev/null @@ -1,31 +0,0 @@ -# -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: range checks for INTEGER, now for array indexing -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; -#include - - mes 2,EM_WSIZE,EM_PSIZE - exp $rcka - pro $rcka, 0 - - lol EM_PSIZE - zlt *1 ; lower bound always 0 - lol EM_PSIZE - lal 0 - loi EM_PSIZE - adp EM_WSIZE - loi EM_WSIZE - cmi EM_WSIZE - zgt *1 - ret 0 -1 - loc EARRAY - trp - ret 0 - end 0 diff --git a/lang/m2/libm2/rcki.e b/lang/m2/libm2/rcki.e deleted file mode 100644 index 72df511f6..000000000 --- a/lang/m2/libm2/rcki.e +++ /dev/null @@ -1,37 +0,0 @@ -# -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: range checks for INTEGER -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; -#include - - mes 2,EM_WSIZE,EM_PSIZE - exp $rcki - pro $rcki, 0 - - lal EM_PSIZE - loi EM_WSIZE - lal 0 - loi EM_PSIZE - loi EM_WSIZE - cmi EM_WSIZE - zlt *1 - lal EM_PSIZE - loi EM_WSIZE - lal 0 - loi EM_PSIZE - adp EM_WSIZE - loi EM_WSIZE - cmi EM_WSIZE - zgt *1 - ret 0 -1 - loc ERANGE - trp - ret 0 - end 0 diff --git a/lang/m2/libm2/rckil.e b/lang/m2/libm2/rckil.e deleted file mode 100644 index 88f461c9a..000000000 --- a/lang/m2/libm2/rckil.e +++ /dev/null @@ -1,37 +0,0 @@ -# -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: range checks for LONGINTS -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; -#include - - mes 2,EM_WSIZE,EM_PSIZE - exp $rckil - pro $rckil, 0 - - lal EM_PSIZE - loi EM_LSIZE - lal 0 - loi EM_PSIZE - loi EM_LSIZE - cmi EM_LSIZE - zlt *1 - lal EM_PSIZE - loi EM_LSIZE - lal 0 - loi EM_PSIZE - adp EM_LSIZE - loi EM_LSIZE - cmi EM_LSIZE - zgt *1 - ret 0 -1 - loc ERANGE - trp - ret 0 - end 0 diff --git a/lang/m2/libm2/rcku.e b/lang/m2/libm2/rcku.e deleted file mode 100644 index 687ea51d0..000000000 --- a/lang/m2/libm2/rcku.e +++ /dev/null @@ -1,37 +0,0 @@ -# -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: range checks for CARDINAL -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; -#include - - mes 2,EM_WSIZE,EM_PSIZE - exp $rcku - pro $rcku, 0 - - lal EM_PSIZE - loi EM_WSIZE - lal 0 - loi EM_PSIZE - loi EM_WSIZE - cmu EM_WSIZE - zlt *1 - lal EM_PSIZE - loi EM_WSIZE - lal 0 - loi EM_PSIZE - adp EM_WSIZE - loi EM_WSIZE - cmu EM_WSIZE - zgt *1 - ret 0 -1 - loc ERANGE - trp - ret 0 - end 0 diff --git a/lang/m2/libm2/rckul.e b/lang/m2/libm2/rckul.e deleted file mode 100644 index 62fb78d18..000000000 --- a/lang/m2/libm2/rckul.e +++ /dev/null @@ -1,37 +0,0 @@ -# -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: Range checks for LONGCARD -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; -#include - - mes 2,EM_WSIZE,EM_PSIZE - exp $rckul - pro $rckul, 0 - - lal EM_PSIZE - loi EM_LSIZE - lal 0 - loi EM_PSIZE - loi EM_LSIZE - cmu EM_LSIZE - zlt *1 - lal EM_PSIZE - loi EM_LSIZE - lal 0 - loi EM_PSIZE - adp EM_LSIZE - loi EM_LSIZE - cmu EM_LSIZE - zgt *1 - ret 0 -1 - loc ERANGE - trp - ret 0 - end 0 diff --git a/lang/m2/libm2/transfer.e b/lang/m2/libm2/transfer.e deleted file mode 100644 index 2bac41517..000000000 --- a/lang/m2/libm2/transfer.e +++ /dev/null @@ -1,258 +0,0 @@ -# -; -; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. -; See the copyright notice in the ACK home directory, in the file "Copyright". -; -; -; Module: implementation of coroutines -; Author: Ceriel J.H. Jacobs -; Version: $Header$ -; -; This version works for EM implementations that have a contiguous downwards -; growing stack, on which data below the stack-pointer is not destroyed. -; -#include -#include - - mes 2, EM_WSIZE, EM_PSIZE - - ; This file contains the implementation of the following routines from - ; the SYSTEM module: - ; TRANSFER, NEWPROCESS - ; The NEWPROCESS routine creates a new coroutine stack frame. - ; The TRANSFER routine implements transfers from one coroutine to another. - ; The memory organization for coroutines is rather complicated. - ; One problem is caused by the fact that the user must allocate the - ; stackspace. So, this stackspace can be located anywhere, including on - ; the heap. This means that we cannot use this space as a stack, because - ; in EM, the stack-pointer may never point below the heap-pointer. - ; So, this space is only used to save the stack when the coroutine isn't - ; running. - ; It also contains information about the size of the frame, the - ; address of the procedure that forms the coroutine body, the offset - ; of the LB from the start of the frame, and the offset of the SP from - ; the start of the frame. - ; So, is looks like this: - ; |-----------------------------| - ; | | - ; | | - ; | | - ; . - ; . - ; . - ; | | - ; | | - ; | | <--- coroutine ident - ; |-----------------------------| - ; | saved SP | - ; |-----------------------------| - ; | saved LB | - ; |-----------------------------| - ; | procedure address or 0 | - ; |-----------------------------| - ; | size | - ; |-----------------------------| - ; - ; Another problem is that the coroutines must always run at the same - ; place in the stack. Therefore, in the runtime startoff a piece of the - ; stack is allocated for coroutines. - - exp $_SYSTEM__NEWPROCESS - exp $_SYSTEM__TRANSFER - inp $ChkSize - - pro $_SYSTEM__NEWPROCESS, 0 - - ; This procedure only initializes the area used for saving the stack. - ; Its definition is: - ; PROCEDURE NEWPROCESS(P:PROC; A:ADDRESS; n:CARDINAL; VAR p1:ADDRESS); - - lol 2*EM_PSIZE ; size of frame (n) - cal $ChkSize - asp EM_WSIZE - lfr EM_WSIZE - sil EM_PSIZE ; store size in area (indicated by A) - lal EM_PSIZE - loi EM_PSIZE ; address of area (A) - lal 0 - loi EM_PSIZE ; address of coroutine body (P) - lal EM_PSIZE - loi EM_PSIZE - adp EM_WSIZE - sti EM_PSIZE ; store it in area - lal EM_PSIZE - loi EM_PSIZE - adp 3*EM_PSIZE + EM_WSIZE ; this becomes the coroutine identifier - lal 2*EM_PSIZE+EM_WSIZE - loi EM_PSIZE - sti EM_PSIZE - ret 0 - end 0 - -target - bss EM_PSIZE, 0, 0 - - pro $_SYSTEM__TRANSFER, 0 - - ; This procedure does all the hard work. - ; It must save the current environment, and restore the one to which the - ; transfer is done. It must also make it look like the return is done - ; from ITS invocation of transfer. - ; Definition is: - ; PROCEDURE TRANSFER(VAR p1, p2 : ADDRESS); - - mes ms_gto ; This is a dangerous procedure - - lal EM_PSIZE - loi EM_PSIZE - loi EM_PSIZE ; address of target coroutine - dup EM_PSIZE - lae CurrentProcess - loi EM_PSIZE - dup EM_PSIZE - lal 0 - loi EM_PSIZE ; address of place where to store address of current coroutine - sti EM_PSIZE ; store - cmp ; compare with current process - zne *1 - ; Here, no real transfer needs to be done - asp EM_PSIZE - ret 0 ; just return -1 - lae target - sti EM_PSIZE ; store it in target - - ; Now, we save the current stack - ; Use local base from main program - - lor 0 ; load LB - lae CurrentProcess - loi EM_PSIZE - adp -2*EM_PSIZE - sti EM_PSIZE ; save it - lor 1 ; load SP - lae CurrentProcess - loi EM_PSIZE - adp -EM_PSIZE - sti EM_PSIZE ; save it - ; Now, we must find a stack we can temporarily use. - ; Just take the one from the main program. - lae MainProcess - loi EM_PSIZE - adp -EM_PSIZE - loi EM_PSIZE - str 1 ; temporary stackpointer - - lae MainLB - loi EM_PSIZE - str 0 - - lae CurrentProcess - loi EM_PSIZE - lae MainProcess - loi EM_PSIZE - cmp - zeq *2 - - lae StackBase - loi EM_PSIZE - lae CurrentProcess - loi EM_PSIZE - adp -3*EM_PSIZE-EM_WSIZE - loi EM_WSIZE ; get size - ngi EM_WSIZE - ads EM_WSIZE ; gives source address - lae CurrentProcess - loi EM_PSIZE ; destination address - lae CurrentProcess - loi EM_PSIZE - adp -3*EM_PSIZE-EM_WSIZE - loi EM_WSIZE - bls EM_WSIZE ; copy - -2 - lae target - loi EM_PSIZE - dup EM_PSIZE - lae CurrentProcess - sti EM_PSIZE ; store target process descriptor in _CurrentProcess - lae MainProcess - loi EM_PSIZE - cmp - zeq *4 - ; Now check if the coroutine was called before - lae target - loi EM_PSIZE - adp -3*EM_PSIZE - loi EM_PSIZE - zer EM_PSIZE - cmp - zeq *5 - ; No, it was'nt - lae StackBase - loi EM_PSIZE - str 1 ; new stack pointer - lae target - loi EM_PSIZE - adp -3*EM_PSIZE - loi EM_PSIZE - zer EM_PSIZE - lae target - loi EM_PSIZE - adp -3*EM_PSIZE - sti EM_PSIZE - cai - loc 0 - cal $exit - ret 0 -5 - lae target - loi EM_PSIZE ; push source address - lae StackBase - loi EM_PSIZE ; subtract size from this and we have the destination address - lae target - loi EM_PSIZE - adp -3*EM_PSIZE-EM_WSIZE - loi EM_WSIZE - ngi EM_WSIZE - ads EM_WSIZE ; got it - lae target - loi EM_PSIZE - adp -3*EM_PSIZE-EM_WSIZE - loi EM_WSIZE - bls EM_WSIZE -4 - lae target - loi EM_PSIZE - adp -2*EM_PSIZE - loi EM_PSIZE - str 0 ; restore LB - lae target - loi EM_PSIZE - adp -EM_PSIZE - loi EM_PSIZE - str 1 ; restore SP - ret 0 - end 0 - - pro $ChkSize, 0 - lol 0 - loc 3*EM_PSIZE+EM_WSIZE - sbi EM_WSIZE - dup EM_WSIZE - stl 0 - loe StackSize - cmu EM_WSIZE - zle *1 - loc M2_TOOLARGE ; trap number for "stack size too large" - trp -1 - lol 0 - loc EM_WSIZE-1 - adi EM_WSIZE - loc EM_WSIZE - dvi EM_WSIZE - loc EM_WSIZE - mli EM_WSIZE - ret EM_WSIZE - end 0 diff --git a/lang/m2/m2mm/Version.c b/lang/m2/m2mm/Version.c deleted file mode 100644 index 164526a9f..000000000 --- a/lang/m2/m2mm/Version.c +++ /dev/null @@ -1 +0,0 @@ -static char Version[] = "ACK Modula-2 Makefile Generator Version 0.3"; diff --git a/lang/m2/m2mm/tab.c b/lang/m2/m2mm/tab.c deleted file mode 100644 index 17065cf9b..000000000 --- a/lang/m2/m2mm/tab.c +++ /dev/null @@ -1,295 +0,0 @@ -/* @cc tab.c -o $INSTALLDIR/tab@ - tab - table generator - - Author: Erik Baalbergen (..tjalk!erikb) -*/ - -#include - -static char *RcsId = "$Header$"; - -#define MAXTAB 10000 -#define MAXBUF 10000 -#define COMCOM '-' -#define FILECOM '%' - -int InputForm = 'c'; -char OutputForm[MAXBUF] = "%s,\n"; -int TabSize = 257; -char *Table[MAXTAB]; -char *Name; -char *ProgCall; - -main(argc, argv) - char *argv[]; -{ - ProgCall = *argv++; - argc--; - while (argc-- > 0) { - if (**argv == COMCOM) { - option(*argv++); - } - else { - process(*argv++, InputForm); - } - } -} - -char * -Salloc(s) - char *s; -{ - char *malloc(); - char *ns = malloc(strlen(s) + 1); - - if (ns) { - strcpy(ns, s); - } - return ns; -} - -option(str) - char *str; -{ - /* note that *str indicates the source of the option: - either COMCOM (from command line) or FILECOM (from a file). - */ - switch (*++str) { - - case ' ': /* command */ - case '\t': - case '\0': - break; - case 'I': - InputForm = *++str; - break; - case 'f': - if (*++str == '\0') { - fprintf(stderr, "%s: -f: name expected\n", ProgCall); - exit(1); - } - DoFile(str); - break; - case 'F': - sprintf(OutputForm, "%s\n", ++str); - break; - case 'T': - printf("%s\n", ++str); - break; - case 'p': - PrintTable(); - break; - case 'C': - ClearTable(); - break; - case 'S': - { - register i = stoi(++str); - - if (i <= 0 || i > MAXTAB) { - fprintf(stderr, "%s: size would exceed maximum\n", - ProgCall); - } - else { - TabSize = i; - } - break; - } - default: - fprintf(stderr, "%s: bad option -%s\n", ProgCall, str); - } -} - -ClearTable() -{ - register i; - - for (i = 0; i < MAXTAB; i++) { - Table[i] = 0; - } -} - -PrintTable() -{ - register i; - - for (i = 0; i < TabSize; i++) { - if (Table[i]) { - printf(OutputForm, Table[i]); - } - else { - printf(OutputForm, "0"); - } - } -} - -process(str, format) - char *str; -{ - char *cstr = str; - char *Name = cstr; /* overwrite original string! */ - - /* strip of the entry name - */ - while (*str && *str != ':') { - if (*str == '\\') { - ++str; - } - *cstr++ = *str++; - } - - if (*str != ':') { - fprintf(stderr, "%s: bad specification: \"%s\", ignored\n", - ProgCall, Name); - return 0; - } - *cstr = '\0'; - str++; - - switch (format) { - - case 'c': - return c_proc(str, Name); - default: - fprintf(stderr, "%s: bad input format\n", ProgCall); - } - return 0; -} - -c_proc(str, Name) - char *str; - char *Name; -{ - int ch, ch2; - int quoted(); - - while (*str) { - if (*str == '\\') { - ch = quoted(&str); - } - else { - ch = *str++; - } - if (*str == '-') { - if (*++str == '\\') { - ch2 = quoted(&str); - } - else { - if (ch2 = *str++); - else str--; - } - if (ch > ch2) { - fprintf(stderr, "%s: bad range\n", ProgCall); - return 0; - } - if (ch >= 0 && ch2 <= 255) - while (ch <= ch2) - Table[ch++] = Salloc(Name); - } - else { - if (ch >= 0 && ch <= 255) - Table[ch] = Salloc(Name); - } - } - return 1; -} - -int -quoted(pstr) - char **pstr; -{ - register int ch; - register int i; - register char *str = *pstr; - - if ((*++str >= '0') && (*str <= '9')) { - ch = 0; - for (i = 0; i < 3; i++) { - ch = 8 * ch + *str - '0'; - if (*++str < '0' || *str > '9') - break; - } - } - else { - switch (*str++) { - - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'b': - ch = '\b'; - break; - case 'r': - ch = '\r'; - break; - case 'f': - ch = '\f'; - break; - default : - ch = *str; - } - } - *pstr = str; - return ch & 0377; -} - -int -stoi(str) - char *str; -{ - register i = 0; - - while (*str >= '0' && *str <= '9') { - i = i * 10 + *str++ - '0'; - } - return i; -} - -char * -getline(s, n, fp) - char *s; - FILE *fp; -{ - register c = getc(fp); - char *str = s; - - while (n--) { - if (c == EOF) { - return NULL; - } - else - if (c == '\n') { - *str++ = '\0'; - return s; - } - *str++ = c; - c = getc(fp); - } - s[n - 1] = '\0'; - return s; -} - -#define BUFSIZE 1024 - -DoFile(name) - char *name; -{ - char text[BUFSIZE]; - FILE *fp; - - if ((fp = fopen(name, "r")) == NULL) { - fprintf(stderr, "%s: cannot read file %s\n", ProgCall, name); - exit(1); - } - while (getline(text, BUFSIZE, fp) != NULL) { - if (text[0] == FILECOM) { - option(text); - } - else { - process(text, InputForm); - } - } -} diff --git a/lang/m2/test/Wirth/makefile b/lang/m2/test/Wirth/makefile deleted file mode 100644 index b4a35cdde..000000000 --- a/lang/m2/test/Wirth/makefile +++ /dev/null @@ -1,47 +0,0 @@ -IFLAGS = -M2FLAGS = -MOD = m2 -SUFFIX = o -LIBS = - -all: PowersOf2 XREF - -objects: PowersOf2_o_files XREF_o_files - - -PowersOf2.$(SUFFIX): \ - PowersOf2.mod \ - /proj/em/Work/lib/m2/InOut.def - $(MOD) -c $(M2FLAGS) $(IFLAGS) PowersOf2.mod -TableHandl.$(SUFFIX): \ - TableHandl.mod \ - TableHandl.def \ - /proj/em/Work/lib/m2/InOut.def \ - /proj/em/Work/lib/m2/Storage.def - $(MOD) -c $(M2FLAGS) $(IFLAGS) TableHandl.mod -XREF.$(SUFFIX): \ - XREF.mod \ - /proj/em/Work/lib/m2/InOut.def \ - TableHandl.def - $(MOD) -c $(M2FLAGS) $(IFLAGS) XREF.mod - -OBS_PowersOf2 = \ - PowersOf2.$(SUFFIX) - -OBS2_PowersOf2 = - -PowersOf2_o_files: $(OBS_PowersOf2) - -PowersOf2: $(OBS_PowersOf2) $(OBS2_PowersOf2) - $(MOD) -o PowersOf2 $(M2FLAGS) $(OBS_PowersOf2) $(OBS2_PowersOf2) $(LIBS) - -OBS_XREF = \ - XREF.$(SUFFIX) \ - TableHandl.$(SUFFIX) - -OBS2_XREF = - -XREF_o_files: $(OBS_XREF) - -XREF: $(OBS_XREF) $(OBS2_XREF) - $(MOD) -o XREF $(M2FLAGS) $(OBS_XREF) $(OBS2_XREF) $(LIBS) diff --git a/lang/occam/comp/Makefile b/lang/occam/comp/Makefile deleted file mode 100644 index 86e5c6c44..000000000 --- a/lang/occam/comp/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -EMHOME = ../../.. -MODLIB = $(EMHOME)/modules/lib -INCL = -I$(EMHOME)/modules/h -I$(EMHOME)/h -GFILES= occam.g -PRIMARY= occam.o Lpars.o keytab.o lex.yy.o code.o em.o -SECUNDARY= symtab.o expr.o builtin.o -TERTIARY= report.o -LLOPT= -LEXLIB=-ll -LIBRARY= $(MODLIB)/libem_mes.a $(MODLIB)/libemk.a \ - $(MODLIB)/liballoc.a $(MODLIB)/libprint.a \ - $(MODLIB)/libstring.a \ - $(MODLIB)/libsystem.a $(LEXLIB) -CFLAGS = -Dvoid=int -O $(INCL) -LDFLAGS = -# void = int, because some compilers don't understand void -HSRC = code.h em.h expr.h sizes.h symtab.h token.h -CSRC = builtin.c code.c em.c expr.c keytab.c report.c symtab.c - -all: dummy - make oc - -dummy: $(GFILES) - LLgen $(LLOPT) $(GFILES) - touch dummy - -oc: $(PRIMARY) $(SECUNDARY) $(TERTIARY) - $(CC) $(LDFLAGS) -o oc $(PRIMARY) $(SECUNDARY) $(TERTIARY) $(LIBRARY) - -lex.yy.c: lex.l - lex lex.l - -install: all - rm -f $(EMHOME)/lib/em_occam - cp oc $(EMHOME)/lib/em_occam - -cmp: all - -cmp oc $(EMHOME)/lib/em_occam - -pr: - @pr Makefile $(HSRC) occam.g lex.l $(CSRC) - -opr: - make pr | opr - -clean: - rm -f lex.yy.c occam.c *.o oc dummy Lpars.c Lpars.h - -$(PRIMARY): Lpars.h -occam.o keytab.o: token.h -occam.o $(SECUNDARY): symtab.h expr.h -$(PRIMARY) $(SECUNDARY): sizes.h -occam.o code.o: code.h -code.o em.o: em.h diff --git a/lang/occam/lib/AR2 b/lang/occam/lib/AR2 deleted file mode 100755 index d249beb97..000000000 --- a/lang/occam/lib/AR2 +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -case $# in - 0) ar ru /user0/bot/lib/lib2.a *.o - ranlib /user0/bot/lib/lib2.a - rm -f *.o - ;; - *) keys=$1 - shift - ar $keys /user0/bot/lib/lib2.a $* - ;; -esac diff --git a/lang/occam/lib/AR4 b/lang/occam/lib/AR4 deleted file mode 100755 index 0560c4a81..000000000 --- a/lang/occam/lib/AR4 +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -case $# in - 0) ar ru /user0/bot/lib/lib4.a *.o - ranlib /user0/bot/lib/lib4.a - rm -f *.o - ;; - *) keys=$1 - shift - ar $keys /user0/bot/lib/lib4.a $* - ;; -esac diff --git a/lang/occam/lib/Makefile b/lang/occam/lib/Makefile deleted file mode 100644 index 357ab5fbf..000000000 --- a/lang/occam/lib/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -PRIMITIVES= par_vax.s -PARALLEL= parco.c par.c co.c -OCRT= ocrt.c builtin.c channel.c chan_struct.c - -COMMON= $(PRIMITIVES) $(PARALLEL) $(OCRT) - -SIZE2= em2.e -SIZE4= em4.e - -LIB2= /user0/bot/lib/lib2.a -LIB4= /user0/bot/lib/lib4.a - -ACK2= vax2 -ACK4= vax4 - -all: lib2 lib4 - -lib2: $(COMMON) $(SIZE2) - rm -f *.o $(LIB2) - $(ACK2) -c.o -L -Dvoid=char -Dptrdiff=long $(COMMON) $(SIZE2) - ar cq $(LIB2) *.o - rm -f *.o - -lib4: $(COMMON) $(SIZE4) - rm -f *.o $(LIB4) - $(ACK4) -c.o -L -Dvoid=char $(COMMON) $(SIZE4) - ar cq $(LIB4) *.o - rm -f *.o diff --git a/lang/occam/lib/em2.e b/lang/occam/lib/em2.e deleted file mode 100644 index fb81a1edc..000000000 --- a/lang/occam/lib/em2.e +++ /dev/null @@ -1,52 +0,0 @@ - mes 2,2,4 - -oldtrp - bss 4, 0, 0 - - exp $init - pro $init, 0 - loc -321-1 - sim - lpi $catch1 - sig - sde oldtrp - cal $initfile - ret 0 - end 0 - - pro $catch1, 0 - lde oldtrp - sig - asp 4 - loe 0 - lde 4 - lol 0 - cal $catch - asp 8 - lol 0 - trp - rtt - end 0 - - exp $now - pro $now, 12 - zre deadlock - lal -12 - loc 35 - mon - asp 2 - ldl -12 - ret 4 - end 12 - - exp $block_mo - pro $block_mo, 0 - ldl 4 - ldl 8 - ldl 0 - loc 4 - loc 2 - cuu - bls 2 - ret 0 - end 0 diff --git a/lang/occam/lib/em4.e b/lang/occam/lib/em4.e deleted file mode 100644 index ff948932c..000000000 --- a/lang/occam/lib/em4.e +++ /dev/null @@ -1,49 +0,0 @@ - mes 2,4,4 - -oldtrp - bss 4, 0, 0 - - exp $init - pro $init, 0 - loc -321-1 - sim - lpi $catch1 - sig - ste oldtrp - cal $initfile - ret 0 - end 0 - - pro $catch1, 0 - loe oldtrp - sig - asp 4 - loe 0 - loe 4 - lol 0 - cal $catch - asp 12 - lol 0 - trp - rtt - end 0 - - exp $now - pro $now, 12 - zre deadlock - lal -12 - loc 35 - mon - asp 4 - lol -12 - ret 4 - end 12 - - exp $block_mo - pro $block_mo, 0 - lol 4 - lol 8 - lol 0 - bls 4 - ret 0 - end 0 diff --git a/lang/occam/lib/ocm_chan.h b/lang/occam/lib/ocm_chan.h deleted file mode 100644 index 0a010758b..000000000 --- a/lang/occam/lib/ocm_chan.h +++ /dev/null @@ -1,48 +0,0 @@ -/* $Header$ */ -/* channel.h - channel definitions */ -#include -#include "parco.h" - -typedef union channel { - struct { /* Interprocess channel */ - char _type; /* Channel type, see note */ - char synch; /* State in channel synchronization */ - long val; /* Transmitted value */ - } c; - struct { /* File channel */ - char _type; /* Dummy field, see note */ - char index; /* Index in the file array */ - char flgs; /* Status flags: in use & readahead */ - char preread; /* Possible preread character */ - } f; -} chan; -#define type c._type /* Channel type */ -/* Note: The channel type should not be part of each structure in chan. But - * the C alignment rules would make chan about 50% bigger if we had done it - * the right way. Note that the order of fields in a struct cannot be a problem - * as long as struct c is the largest within the union. - */ - -#define C_T_CHAN 0 /* Type of a interprocess channel */ -#define C_T_FILE 1 /* Type of a file channel */ - -#define C_S_FREE 0 /* IP channel is free */ -#define C_S_ANY 1 /* IP channel contains data */ -#define C_S_ACK 2 /* IP channel data is removed */ - -#define C_F_EOF (-1L) /* File channel returns EOF */ -#define C_F_TEXT (-2L) /* File channel becomes line oriented */ -#define C_F_RAW (-3L) /* File channel becomes character oriented */ - -#define C_F_INUSE 0x01 /* File channel is connected to a UNIX file */ -#define C_F_READAHEAD 0x02 /* File channel has a preread character */ - -extern chan file[_NFILE]; /* Array of file channels */ -extern FILE *unix_file[_NFILE]; /* Pointers to buffered UNIX files */ - -void c_init(); - -void chan_in(), cbyte_in(), c_wa_in(), c_ba_in(); -void chan_out(), c_wa_out(), c_ba_out(); - -int chan_any(); diff --git a/lang/occam/lib/ocm_parco.h b/lang/occam/lib/ocm_parco.h deleted file mode 100644 index 9fb1c647e..000000000 --- a/lang/occam/lib/ocm_parco.h +++ /dev/null @@ -1,19 +0,0 @@ -/* $Header$ */ -/* parco.h - Define names for simulation routines - * - * This file is to be included by users of the higher-level routines - * - */ - -void pc_begin(), resumenext(), parend(), resume(), coend(); -int pc_fork(); - -#define nullid ((int *) 0 - (int *) 0) - /* I.e. a 0 of type "pointer difference" */ - -#define parbegin(sbrk) pc_begin(sbrk, nullid) -#define parfork() pc_fork(nullid) -#define cobegin(sbrk, id) pc_begin(sbrk, id) -#define cofork(id) pc_fork(id) - -extern int deadlock; diff --git a/lang/occam/lib/ocm_proc.h b/lang/occam/lib/ocm_proc.h deleted file mode 100644 index 6eb2824f1..000000000 --- a/lang/occam/lib/ocm_proc.h +++ /dev/null @@ -1,53 +0,0 @@ -/* $Header$ */ -/* process.h - Define administration types and functions - * - * This file is to be included by implementors of the higher - * level routines - * - */ -#include "parco.h" - -#ifndef ptrdiff /* This type must be able to hold a pointer difference */ -#define ptrdiff int /* Define as long int if necessary */ -#endif - -#define nil 0 -void *alloc(), free(); - -typedef ptrdiff wordsize, identification; - -wordsize top_size(); -int top_save(); -void top_load(); /* Primitives */ - -struct procgroup; - -struct process { - struct process *next; /* Next process in the same group */ - struct procgroup *down; /* Process group running under this process */ - void *stack; /* Pointer to the saved stack top */ - identification id; /* Coroutine identification */ -}; - -#define init_between __i_b__ /* These names are hidden */ -#define save_between __s_b__ -#define load_betweens __l_b__ -#define delete_between __d_b__ - -void init_between(), save_between(), load_betweens(), delete_between(); - -struct procgroup { - struct process **active;/* Active process within this group */ - struct procgroup *up; /* The group that this group belongs to */ - struct process *first; /* List of processes belonging to this group */ - void *s_brk; /* Point where the stack is split */ - void *between; /* Stack space between s_brk and up->s_brk */ -}; - -#define group __grp__ /* Ignore this please */ -#define highest_group __hgrp__ - -extern struct procgroup *group; /* Current running group */ -extern struct procgroup *highest_group; /* highest group that has been seen - * while searching for a process - */ diff --git a/lang/occam/lib/par_em2.e b/lang/occam/lib/par_em2.e deleted file mode 100644 index ed45d527c..000000000 --- a/lang/occam/lib/par_em2.e +++ /dev/null @@ -1,53 +0,0 @@ - mes 2,2,4 - exp $top_size - pro $top_size, 14 - ldl 0 ; s_brk - lor 1 ; s_brk SP - sbs 4 ; s_brk-SP - ret 4 ; return size of block to be saved - end 14 - - exp $top_save - pro $top_save, 0 - loe 0 - lde 4 ; load line number and file name - lim ; ignore mask - lor 0 ; LB - ldl 0 ; size of block - loc 4 - loc 2 - cuu - dup 2 - stl 0 ; push & store size in 2 bytes - lor 1 ; SP (the SP BEFORE pushing) - lor 1 ; SP (address of stack top to save) - ldl 4 ; area - lol 0 ; size - bls 2 ; move whole block - asp 18 ; remove the lot from the stack - loc 1 - ret 2 ; return 1 - end 0 - - exp $top_load - pro $top_load, 0 - ldl 0 - dup 4 - sde area ; copy area pointer from argument 0 - loi 4 ; load indirect to - str 1 ; restore SP - lde area ; load area, note that the SP is now correct - lor 1 ; SP (the SP AFTER, see above) - lde area - lof 4 ; size of block - bls 2 ; move block back (SP becomes the SP BEFORE again!) - asp 2 ; drop size - str 0 ; LB - sim ; ignore mask - sde 4 - ste 0 ; line and file - loc 0 - ret 2 ; return 0 - end 0 -area - bss 4,0,0 diff --git a/lang/occam/lib/par_em4.e b/lang/occam/lib/par_em4.e deleted file mode 100644 index b47cffbd3..000000000 --- a/lang/occam/lib/par_em4.e +++ /dev/null @@ -1,46 +0,0 @@ - mes 2,4,4 - exp $top_size - pro $top_size, 20 - lol 0 ; s_brk - lor 1 ; s_brk SP - sbs 4 ; s_brk-SP - ret 4 ; return size of block to be saved - end 20 - - exp $top_save - pro $top_save, 0 - lde 0 ; load line number and file name - lim ; ignore mask - lor 0 ; LB - lol 0 ; size of block - lor 1 ; SP (the SP BEFORE pushing) - lor 1 ; SP (address of stack top to save) - lol 4 ; area - lol 0 ; size - bls 4 ; move whole block - asp 24 ; remove the lot from the stack - loc 1 - ret 4 ; return 1 - end 0 - - exp $top_load - pro $top_load, 0 - lol 0 - dup 4 - ste area ; copy area pointer from argument 0 - loi 4 ; load indirect to - str 1 ; restore sp - loe area ; load area, note that the SP is now correct - lor 1 ; SP (the SP AFTER, see above) - loe area - lof 4 ; size of block - bls 4 ; move block back (SP becomes the SP BEFORE again!) - asp 4 ; drop size - str 0 ; LB - sim ; ignore mask - sde 0 ; line and file - loc 0 - ret 4 ; return 0 - end 0 -area - bss 4,0,0 diff --git a/lang/occam/lib/par_vax.s b/lang/occam/lib/par_vax.s deleted file mode 100644 index 04ab0a977..000000000 --- a/lang/occam/lib/par_vax.s +++ /dev/null @@ -1,51 +0,0 @@ - # VAX code for the top_* primitives - - .set BIG, 0x8000 # 32K chunk per movc3 - .text - .align 1 - .globl _top_size - .globl _top_save - .globl _top_load - -_top_size: .word 0x0000 - subl3 sp, 4(ap), r0 # bytes between stack pointer and break - addl2 $(8+6+1)*4, r0 # add 8 regs, 6 pushed longwords (line, file, - ret # ap, fp, size, sp) and 1 extra argument - -_top_save: .word 0x0ff0 # save regs r4-r11 - movq hol0, -(sp) # push line number and file name - movq ap, -(sp) # push LB equivalents ap and fp - pushl 4(ap) # push size - pushal -4(sp) # push sp (the sp AFTER pushing) - movl $BIG, r6 # chunk size in r6 - movl 4(ap), r7 # size of block to move - movl sp, r1 # source address - movl 8(ap), r3 # destination address - cmpl r7, r6 - jlequ 0f -1: movc3 r6, (r1), (r3) # move chunk of the block, add r6 to r1 and r3 - subl2 r6, r7 - cmpl r7, r6 - jgtru 1b -0: movc3 r7, (r1), (r3) # move what's left - movl $1, r0 # return 1 - ret - -_top_load: .word 0x0000 - movl 4(ap), r1 # source - movl (r1), sp # restore sp - movl $BIG, r6 # chunk size - movl 4(r1), r7 # size - movl sp, r3 # destination - cmpl r7, r6 - jlequ 0f -1: movc3 r6, (r1), (r3) # move chunk of the block back - subl2 r6, r7 - cmpl r7, r6 - jgtru 1b -0: movc3 r7, (r1), (r3) # move what's left back - addl2 $8, sp # pop saved sp and size - movq (sp)+, ap # pop LB's - movq (sp)+, hol0 # pop line and file - clrl r0 # return 0 - ret diff --git a/lang/occam/test/tst.ocm b/lang/occam/test/tst.ocm deleted file mode 100644 index 7064d84e9..000000000 --- a/lang/occam/test/tst.ocm +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include - -var fmt[byte 100]: -var d, c: -seq - input ? c - decin(input, d, c) - while c<>EOF - seq - chan link: - par - printd(link, "XXXX %%%ds XXXXX*#00", d) - var c, i: - seq - i:=0 - link ? c - while c<>0 - seq - i:=i+1 - fmt[byte i]:=c - link ? c - prints("XXXX %s XXXXX", "YYYYY") - decin(input, d, c) diff --git a/lang/pc/Makefile b/lang/pc/Makefile deleted file mode 100644 index 764153fe9..000000000 --- a/lang/pc/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -d=../.. -h=$d/h - -cmp: - (cd comp ; make cmp) - -install: - (cd comp ; make install) - -clean: - -rm -f *.o *.old - (cd comp ; make clean) - -opr: - make pr ^ opr - -pr: - @(cd comp ; make pr) - @(cd libpc ; make pr) diff --git a/lang/pc/comp/Resolve b/lang/pc/comp/Resolve deleted file mode 100755 index e64381d5e..000000000 --- a/lang/pc/comp/Resolve +++ /dev/null @@ -1,60 +0,0 @@ -: create a directory Xsrc with name clashes resolved -: and run make in that directory -: '$Header$' - -case $# in -1) - ;; -*) echo "$0: one argument expected" 1>&2 - exit 1 - ;; -esac -PW=`pwd` -case $1 in -main) target=$PW/$1 - ;; -omain) target=$PW/$1 - options=-DPEEPHOLE - ;; -cemain) target=$PW/$1 - options=-DCODE_EXPANDER - ;; -Xlint) target=$1 - ;; -*) echo "$0: $1: Illegal argument" 1>&2 - exit 1 - ;; -esac -if test -d ../Xsrc -then - : -else mkdir ../Xsrc -fi -make EMHOME=$EMHOME longnames -: remove code generating routines from the clashes list as they are defines. -: code generating routine names start with C_ -sed '/^C_/d' < longnames > tmp$$ -cclash -c -l7 tmp$$ > ../Xsrc/Xclashes -rm -f tmp$$ -cd ../Xsrc -if cmp -s Xclashes clashes -then - : -else - mv Xclashes clashes -fi -rm -f Makefile -ed - $PW/Makefile <<'EOF' -/^#EXCLEXCL/,/^#INCLINCL/d -w Makefile -q -EOF -for i in `cat $PW/Cfiles` -do - cat >> Makefile < $i -EOF -done -make EMHOME=$EMHOME COPTIONS=$options MACH=$MACH CURRDIR=$PW/ $target diff --git a/lang/pc/comp/Version.c b/lang/pc/comp/Version.c deleted file mode 100644 index 42ba0f21c..000000000 --- a/lang/pc/comp/Version.c +++ /dev/null @@ -1 +0,0 @@ -static char Version[] = "ACK Pascal compiler Version 2.2"; diff --git a/lang/pc/comp/char.c b/lang/pc/comp/char.c deleted file mode 100644 index ee457314b..000000000 --- a/lang/pc/comp/char.c +++ /dev/null @@ -1,394 +0,0 @@ -#include "class.h" -char tkclass[] = { - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STSKIP, - STNL, - STNL, - STNL, - STSKIP, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STSKIP, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STGARB, - STSTR, - STSIMP, - STSIMP, - STSIMP, - STSIMP, - STSIMP, - STSIMP, - STCOMP, - STSIMP, - STNUM, - STNUM, - STNUM, - STNUM, - STNUM, - STNUM, - STNUM, - STNUM, - STNUM, - STNUM, - STCOMP, - STSIMP, - STCOMP, - STSIMP, - STCOMP, - STGARB, - STSIMP, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STSIMP, - STGARB, - STSIMP, - STSIMP, - STGARB, - STGARB, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STIDF, - STSIMP, - STGARB, - STSIMP, - STGARB, - STGARB, - STEOI, -}; -char inidf[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, -}; -char isdig[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, -}; diff --git a/lang/pc/comp/next.c b/lang/pc/comp/next.c deleted file mode 100644 index dc5064a03..000000000 --- a/lang/pc/comp/next.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "debug.h" -struct lab *h_lab = 0; -#ifdef DEBUG -int cnt_lab = 0; -#endif -struct forwtype *h_forwtype = 0; -#ifdef DEBUG -int cnt_forwtype = 0; -#endif -struct def *h_def = 0; -#ifdef DEBUG -int cnt_def = 0; -#endif -struct withdesig *h_withdesig = 0; -#ifdef DEBUG -int cnt_withdesig = 0; -#endif -struct node *h_node = 0; -#ifdef DEBUG -int cnt_node = 0; -#endif -struct scope *h_scope = 0; -#ifdef DEBUG -int cnt_scope = 0; -#endif -struct scopelist *h_scopelist = 0; -#ifdef DEBUG -int cnt_scopelist = 0; -#endif -struct paramlist *h_paramlist = 0; -#ifdef DEBUG -int cnt_paramlist = 0; -#endif -struct type *h_type = 0; -#ifdef DEBUG -int cnt_type = 0; -#endif -struct case_hdr *h_case_hdr = 0; -#ifdef DEBUG -int cnt_case_hdr = 0; -#endif -struct case_entry *h_case_entry = 0; -#ifdef DEBUG -int cnt_case_entry = 0; -#endif -struct tmpvar *h_tmpvar = 0; -#ifdef DEBUG -int cnt_tmpvar = 0; -#endif diff --git a/lang/pc/comp/nmclash.c b/lang/pc/comp/nmclash.c deleted file mode 100644 index ca2567a80..000000000 --- a/lang/pc/comp/nmclash.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Accepted if many characters of long names are significant */ -abcdefghijklmnopr() { } -abcdefghijklmnopq() { } -main() { } diff --git a/lang/pc/comp/tab.c b/lang/pc/comp/tab.c deleted file mode 100644 index 17065cf9b..000000000 --- a/lang/pc/comp/tab.c +++ /dev/null @@ -1,295 +0,0 @@ -/* @cc tab.c -o $INSTALLDIR/tab@ - tab - table generator - - Author: Erik Baalbergen (..tjalk!erikb) -*/ - -#include - -static char *RcsId = "$Header$"; - -#define MAXTAB 10000 -#define MAXBUF 10000 -#define COMCOM '-' -#define FILECOM '%' - -int InputForm = 'c'; -char OutputForm[MAXBUF] = "%s,\n"; -int TabSize = 257; -char *Table[MAXTAB]; -char *Name; -char *ProgCall; - -main(argc, argv) - char *argv[]; -{ - ProgCall = *argv++; - argc--; - while (argc-- > 0) { - if (**argv == COMCOM) { - option(*argv++); - } - else { - process(*argv++, InputForm); - } - } -} - -char * -Salloc(s) - char *s; -{ - char *malloc(); - char *ns = malloc(strlen(s) + 1); - - if (ns) { - strcpy(ns, s); - } - return ns; -} - -option(str) - char *str; -{ - /* note that *str indicates the source of the option: - either COMCOM (from command line) or FILECOM (from a file). - */ - switch (*++str) { - - case ' ': /* command */ - case '\t': - case '\0': - break; - case 'I': - InputForm = *++str; - break; - case 'f': - if (*++str == '\0') { - fprintf(stderr, "%s: -f: name expected\n", ProgCall); - exit(1); - } - DoFile(str); - break; - case 'F': - sprintf(OutputForm, "%s\n", ++str); - break; - case 'T': - printf("%s\n", ++str); - break; - case 'p': - PrintTable(); - break; - case 'C': - ClearTable(); - break; - case 'S': - { - register i = stoi(++str); - - if (i <= 0 || i > MAXTAB) { - fprintf(stderr, "%s: size would exceed maximum\n", - ProgCall); - } - else { - TabSize = i; - } - break; - } - default: - fprintf(stderr, "%s: bad option -%s\n", ProgCall, str); - } -} - -ClearTable() -{ - register i; - - for (i = 0; i < MAXTAB; i++) { - Table[i] = 0; - } -} - -PrintTable() -{ - register i; - - for (i = 0; i < TabSize; i++) { - if (Table[i]) { - printf(OutputForm, Table[i]); - } - else { - printf(OutputForm, "0"); - } - } -} - -process(str, format) - char *str; -{ - char *cstr = str; - char *Name = cstr; /* overwrite original string! */ - - /* strip of the entry name - */ - while (*str && *str != ':') { - if (*str == '\\') { - ++str; - } - *cstr++ = *str++; - } - - if (*str != ':') { - fprintf(stderr, "%s: bad specification: \"%s\", ignored\n", - ProgCall, Name); - return 0; - } - *cstr = '\0'; - str++; - - switch (format) { - - case 'c': - return c_proc(str, Name); - default: - fprintf(stderr, "%s: bad input format\n", ProgCall); - } - return 0; -} - -c_proc(str, Name) - char *str; - char *Name; -{ - int ch, ch2; - int quoted(); - - while (*str) { - if (*str == '\\') { - ch = quoted(&str); - } - else { - ch = *str++; - } - if (*str == '-') { - if (*++str == '\\') { - ch2 = quoted(&str); - } - else { - if (ch2 = *str++); - else str--; - } - if (ch > ch2) { - fprintf(stderr, "%s: bad range\n", ProgCall); - return 0; - } - if (ch >= 0 && ch2 <= 255) - while (ch <= ch2) - Table[ch++] = Salloc(Name); - } - else { - if (ch >= 0 && ch <= 255) - Table[ch] = Salloc(Name); - } - } - return 1; -} - -int -quoted(pstr) - char **pstr; -{ - register int ch; - register int i; - register char *str = *pstr; - - if ((*++str >= '0') && (*str <= '9')) { - ch = 0; - for (i = 0; i < 3; i++) { - ch = 8 * ch + *str - '0'; - if (*++str < '0' || *str > '9') - break; - } - } - else { - switch (*str++) { - - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'b': - ch = '\b'; - break; - case 'r': - ch = '\r'; - break; - case 'f': - ch = '\f'; - break; - default : - ch = *str; - } - } - *pstr = str; - return ch & 0377; -} - -int -stoi(str) - char *str; -{ - register i = 0; - - while (*str >= '0' && *str <= '9') { - i = i * 10 + *str++ - '0'; - } - return i; -} - -char * -getline(s, n, fp) - char *s; - FILE *fp; -{ - register c = getc(fp); - char *str = s; - - while (n--) { - if (c == EOF) { - return NULL; - } - else - if (c == '\n') { - *str++ = '\0'; - return s; - } - *str++ = c; - c = getc(fp); - } - s[n - 1] = '\0'; - return s; -} - -#define BUFSIZE 1024 - -DoFile(name) - char *name; -{ - char text[BUFSIZE]; - FILE *fp; - - if ((fp = fopen(name, "r")) == NULL) { - fprintf(stderr, "%s: cannot read file %s\n", ProgCall, name); - exit(1); - } - while (getline(text, BUFSIZE, fp) != NULL) { - if (text[0] == FILECOM) { - option(text); - } - else { - process(text, InputForm); - } - } -} diff --git a/lib/descr/fe.src b/lib/descr/fe.src deleted file mode 100644 index c77669d57..000000000 --- a/lib/descr/fe.src +++ /dev/null @@ -1,225 +0,0 @@ -# (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. -# $Header$ -# -# Don't generate line updating code by default (i.e.: -L flag provided to cem). -# To put it on again: use -NL -var LFLAG=-L -var C_INCLUDES=-I{EM}/include/_tail_cc -var ANSI_C_INCLUDES=-I{EM}/include/tail_ac - -callname ack -name cpp - # no from, this is a preprocessor - to .i - program {EM}/lib/cpp{ANSI_C?} - mapflag -I* CPP_F={CPP_F?} -I* - mapflag -U* CPP_F={CPP_F?} -U* - mapflag -D* CPP_F={CPP_F?} -D* - mapflag -P CPP_F={CPP_F?} -P - mapflag -C CPP_F={CPP_F?} -C - mapflag -wo CPP_F={CPP_F?} -o - mapflag -ansi ANSI_C=.ansi - args {CPP_F?} ({SUFFIX?}:.ocm=-I{EM}/include/occam) \ - ({ANSI_C?}:.ansi={SYSINCLUDES?} {ANSI_C_INCLUDES} {INCLUDES?}) \ - ({ANSI_C?.c}:{SUFFIX}={SYSINCLUDES?} {C_INCLUDES} {INCLUDES?}) \ - -D{NAME} \ - ({ANSI_C?.xx}:.xx=-DEM_WSIZE={w} -DEM_PSIZE={p} \ - -DEM_SSIZE={s} -DEM_LSIZE={l} -DEM_FSIZE={f} -DEM_DSIZE={d}) \ - -D_EM_WSIZE={w} -D_EM_PSIZE={p} \ - -D_EM_SSIZE={s} -D_EM_LSIZE={l} -D_EM_FSIZE={f} -D_EM_DSIZE={d} \ - < - stdout - prep is -end -name cem - from .c - to .k - program {EM}/lib/em_cemcom{ANSI_C?} - mapflag -ansi ANSI=ansi -# mapflag -I* CPP_F={CPP_F?} -I* -# mapflag -U* CPP_F={CPP_F?} -U* -# mapflag -D* CPP_F={CPP_F?} -D* - mapflag -M* CEM_F={CEM_F?} -M* - mapflag -L CEM_F={CEM_F?} -L - mapflag -A CEM_F={CEM_F?} -A - mapflag -NL LFLAG= - mapflag -KR CEM_F={CEM_F?} -R - mapflag -w CEM_F={CEM_F?} -w - mapflag -wa CEM_F={CEM_F?} -a - mapflag -wo CEM_F={CEM_F?} -o - mapflag -ws CEM_F={CEM_F?} -s - mapflag -g CEM_F={CEM_F?} -g - mapflag -p CEM_F={CEM_F?} -p - mapflag -V* CEM_F={CEM_F?} -V* - rts .c - need .c - args \ - {CPP_F?} \ - {SYSINCLUDES?} \ - ({ANSI_C?}:.ansi={ANSI_C_INCLUDES}) \ - ({ANSI_C?.c}:.c={C_INCLUDES}) \ - {INCLUDES?} \ - -D{NAME} \ - -D_EM_WSIZE={w} -D_EM_PSIZE={p} \ - -D_EM_SSIZE={s} -D_EM_LSIZE={l} -D_EM_FSIZE={f} -D_EM_DSIZE={d} \ - -Vw{w}.{w}i{w}.{w}p{p}.{w}f{f}.{w}s{s}.{s}l{l}.{w}d{d}.{w} \ - {CC_ALIGN?} \ - {CEM_F?} {LFLAG?} < > - callname acc - callname cc -end -name pc - from .p - to .k - program {EM}/lib/em_pc - mapflag -L PC_F={PC_F?} -L -# mapflag -s PC_F={PC_F?} -s - mapflag -_ PC_F={PC_F?} -U - mapflag -w PC_F={PC_F?} -w - mapflag -V* PC_F={PC_F?} -V* - mapflag -M* PC_F={PC_F?} -M* -# mapflag -i* PC_F={PC_F?} -i* - mapflag -A PC_F={PC_F?} -A -# mapflag -R PC_F={PC_F?} -R - mapflag --* PC_F={PC_F?} -* -#range checks can only be disabled through comments - args \ - -Vw{w}.{w}i{w}.{w}l{l}.{w}p{p}.{w}f{d}.{w}S{w}.{w} \ - {PC_F?} < > {SOURCE} - prep cond - rts .p - need .p - callname apc - callname pc -end -name m2 - from .mod.def - to .k - program {EM}/lib/em_m2 - mapflag -I* M2_INCL={M2_INCL?} -I* - mapflag -L M2_F={M2_F?} -L - mapflag -g M2_F={M2_F?} -g - mapflag -w* M2_F={M2_F?} -w* - mapflag -W* M2_F={M2_F?} -W* - mapflag -_ M2_F={M2_F?} -U - mapflag -M* M2_F={M2_F?} -M* - mapflag -x M2_F={M2_F?} -x - mapflag -Xs M2_F={M2_F?} -s - mapflag -V* M2_F={M2_F?} -V* - mapflag --* M2_F={M2_F?} -* - args \ - {M2_INCL?} -I{EM}/lib/m2 {M2SYSLIB?} \ - -Vw{w}.{w}i{w}.{w}p{p}.{w}l{l}.{w}f{f}.{w}d{d}.{w} \ - {M2_ALIGN?} {M2_F?} < > - prep cond - rts .mod - need .mod - callname m2 -end -name ocm - from .ocm - to .k - program {EM}/lib/em_occam - mapflag -L OCM_F={OCM_F?} -L - mapflag -V* OCM_F={OCM_F?} -V* - args -Vw{w}p{p}l{l} {OCM_F?} - stdin - stdout - rts .ocm - need .ocm - prep cond - callname ocm -end -name abc - from .b - to .k - program {EM}/lib/em_bem - mapflag -h ABC_F={ABC_F?} -h - mapflag -w ABC_F={ABC_F?} -w - mapflag -L ABC_F={ABC_F?} -L - mapflag -E ABC_F={ABC_F?} -E -# mapflag -d ABC_F={ABC_F?} -d - args -Vw{w}p{p}f{d} {ABC_F?} < > {SOURCE} - prep cond - rts .b - need .b - callname abc -end -var A68INIT={EM}/lib/em_a68s_init -name a68s - from .8.a68 - to .k - program {EM}/lib/em_a68s{w}{p} - mapflag -PA* A68INIT=* - args < > {SOURCE}.lst {A68INIT}{w}{p} /dev/null - prep cond - rts .8 - need .8 - callname a68s -end -name encode - from .e - to .k - program {EM}/lib/em_encode - args < - prep cond - stdout -end -name opt - from .k - to .m - program {EM}/lib/em_opt - mapflag -LIB OPT_F={OPT_F?} -L - args {OPT_F?} < - stdout - optimizer -end -name ego - from .m.ma - to .gk - program {EM}/lib/em_ego - mapflag -EGO-* EGO_F={EGO_F?} -* -# The following lines are obsolete, but here for backwards compatibility. -# They should be removed some day. - mapflag -IL* EGO_F={EGO_F?} -IL* - mapflag -CS* EGO_F={EGO_F?} -CS* - mapflag -SR* EGO_F={EGO_F?} -SR* - mapflag -UD* EGO_F={EGO_F?} -UD* - mapflag -LV* EGO_F={EGO_F?} -LV* - mapflag -SA* EGO_F={EGO_F?} -RA* - mapflag -SP* EGO_F={EGO_F?} -SP* - mapflag -BO* EGO_F={EGO_F?} -BO* - mapflag -CJ* EGO_F={EGO_F?} -CJ* - mapflag -EV EGO_F={EGO_F?} -V -# End of obsolete lines - mapflag -Q* EGO_F={EGO_F?} -Q* - mapflag -T* EGO_F={EGO_F?} -T* - mapflag -S* EGO_F={EGO_F?} -S* - mapflag -s* EGO_F={EGO_F?} -s* - mapflag -a EGO_F={EGO_F?} -a - mapflag -O* EGO_F={EGO_F?} -O* - args \ - {EGO_F?} -P {EM}/lib/ego \ - -M{EM}/lib/ego/{M}descr < - optimizer 2 - stdout - combiner -end -name opt2 - # output of the global optimizer is processed by a stripped version - # of the em peephole optimizer - from .gk - to .g - program {EM}/lib/em_opt2 -# mapflag -LIB OPT_F={OPT_F?} -L - args {OPT_F?} < - optimizer - stdout -end -name decode - from .k.m.g.gk - to .e - program {EM}/lib/em_decode - args < - stdout -end diff --git a/lib/descr/ibm.nosid b/lib/descr/ibm.nosid deleted file mode 100644 index d334f57ba..000000000 --- a/lib/descr/ibm.nosid +++ /dev/null @@ -1,40 +0,0 @@ -# $Revision$ -var w=2 -var p=2 -var s=2 -var l=4 -var f=4 -var d=8 -var NAME=i8086 -var M=i86 -var LIB=lib/i86/tail_ -var LIBIBM=lib/ibm/tail_ -var RT=lib/i86/head_ -var RTIBM=lib/ibm/head_ -var CPP_F=-Dunix -var INCLUDES=-I{EM}/include -I{EM}/lib/ibm/include -name be - from .m.g - to .s - program {EM}/lib/{M}/cg - args < - stdout - need .e -end -name asld - from .s.a - to .out - outfile a.out - program {EM}/lib/{M}/as - mapflag -l* LNAME={EM}/{LIB}* - mapflag -i IFILE={EM}/{RT}i - args {IFILE?} (.e:{HEAD}={EM}/{RTIBM}em) \ - ({RTS}:.b.c={EM}/{RT}cc) ({RTS}:.p={EM}/{RT}pc) -o > < \ - (.p:{TAIL}={EM}/{LIB}pc) \ - (.b:{TAIL}={EM}/{LIB}bc) \ - (.b.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) \ - (.e:{TAIL}={EM}/{LIBIBM}em) \ - (.b.c.p:{TAIL}={EM}/{LIBIBM}mon) \ - (.e:{TAIL}={EM}/{LIBIBM}em.vend) - linker -end diff --git a/lib/descr/int b/lib/descr/int deleted file mode 100644 index a4043e7b4..000000000 --- a/lib/descr/int +++ /dev/null @@ -1,35 +0,0 @@ -# $Revision$ -var w=2 -var p=2 -var s=2 -var l=4 -var f=4 -var d=8 -var M=int -var NAME=int22 -var LIB=lib/int22/tail_ -var RT=lib/int22/head_ -var SIZE_FLAG=-sm -var CPP_F=-Dunix=unix -var INCLUDES=-I{EM}/include/_tail_cc -I{EM}/include/_tail_mon -name asld - from .k.m.a.g - to .out - outfile e.out - program {EM}/lib/em_ass - mapflag -l* LNAME={EM}/{LIB}* - mapflag -+* ASS_F={ASS_F?} -+* - mapflag --* ASS_F={ASS_F?} --* - mapflag -s* SIZE_FLAG=-s* - args {SIZE_FLAG} \ - ({RTS}:.ocm.b.c={EM}/{RT}cc) \ - ({RTS}:.mod={EM}/{RT}m2) \ - ({RTS}:.p={EM}/{RT}pc) -o > < \ - (.p:{TAIL}={EM}/{LIB}pc) \ - (.b:{TAIL}={EM}/{LIB}bc) \ - (.ocm:{TAIL}={EM}/{LIB}ocm) \ - (.mod:{TAIL}={EM}/{LIB}m2) \ - (.ocm.b.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) \ - (.mod.ocm.b.c.p:{TAIL}={EM}/{LIB}mon) - linker -end diff --git a/lib/descr/m68k2.macs b/lib/descr/m68k2.macs deleted file mode 100644 index 203e7e31b..000000000 --- a/lib/descr/m68k2.macs +++ /dev/null @@ -1,39 +0,0 @@ -# $Revision$ -var w=2 -var p=4 -var s=2 -var l=4 -var f=4 -var d=8 -var NAME=m68k2 -var M=m68k2 -var LIBDIR=/lib/{M} -var LIB=lib/{M}/tail_ -var RT=lib/{M}/head_ -var INCLUDES=-I{EM}/include -I/usr/include -name be - from .m.g - to .s - program {EM}/lib/{M}/cg - args < - stdout - need .e -end -name asld - from .s.a - to .out - outfile a.out - program {EM}/lib/{M}/as - mapflag -l* LNAME={EM}/{LIB}* - args (.e:{HEAD}={EM}/{RT}em) \ -({RTS}:.b.c={EM}/{RT}cc) ({RTS}:.p={EM}/{RT}pc) -o > < \ -(.p.c.b:{TAIL}={EM}/{LIBDIR}/sys1.s) (.p:{TAIL}={EM}/{LIBDIR}/sys2.s) \ -(.c:{TAIL}={EM}/{LIBDIR}/write.s) \ -(.p:{TAIL}={EM}/{LIB}pc) \ -(.b:{TAIL}={EM}/{LIB}bc) \ -(.b.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) \ -(.b.c:{TAIL}={EM}/{LIB}mon {EM}/{LIB}fake) \ -(.e:{TAIL}={EM}/{LIB}em.rt {EM}/{LIB}em.vend) - prep cond - linker -end diff --git a/lib/descr/nascom b/lib/descr/nascom deleted file mode 100644 index db67d2005..000000000 --- a/lib/descr/nascom +++ /dev/null @@ -1,30 +0,0 @@ -# $Revision$ -var w=1 -var p=2 -var s=1 -var l=2 -var f=4 -var d=8 -var NAME=nascom -var M=z80a -var LIB=lib/{M}/tail_ -var RT=lib/{M}/head_ -var INCLUDES=-I{EM}/include -I/usr/include -name be - from .m.g - to .s - program {EM}/lib/{M}/be - args < - stdout - need .e -end -name asld - from .s.a - to .out - outfile a.out - program {EM}/lib/z80/as - mapflag -l* LNAME={EM}/{LIB}* - args (.e:{HEAD}={EM}/{RT}em) ({RTS}:.b.c={EM}/{RT}cc) -o > \ -(.e:{TAIL}={EM}/{LIB}em.1 {EM}/{LIB}em.2) - linker -end diff --git a/lib/descr/net86 b/lib/descr/net86 deleted file mode 100644 index 27097aed5..000000000 --- a/lib/descr/net86 +++ /dev/null @@ -1,32 +0,0 @@ -var w=2 -var p=2 -var s=2 -var l=4 -var f=4 -var d=8 -var NAME=i8086 -var M=i86 -var LIB=mach/i86/lib/tail_ -var RT=mach/i86/lib/head_ -var INCLUDES=-I{EM}/include -I/usr/include -name be - from .m - to .s - program {EM}/lib/{M}_cg - args < - prop > - need .e -end -name asld - from .s.a - to a.out - program {EM}/lib/{M}_as - mapflag -l* LNAME={EM}/{LIB}* - mapflag -i IFILE={EM}/{RT}i - args {IFILE?} (.e:{HEAD}={EM}/{RT}em) \ -({RTS}:.c={EM}/{RT}cc) ({RTS}:.p={EM}/{RT}pc) -o > < \ -(.p:{TAIL}={EM}/{LIB}pc) (.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) \ -(.c.p.e:{TAIL}={EM}/{LIB}netio) (.c.p.e:{TAIL}={EM}/{LIB}alo) \ -(.c.p:{TAIL}={EM}/{LIB}mon) (.e:{TAIL}={EM}/{LIB}em) - prop C -end diff --git a/lib/descr/sat86 b/lib/descr/sat86 deleted file mode 100644 index ecfa18d82..000000000 --- a/lib/descr/sat86 +++ /dev/null @@ -1,34 +0,0 @@ -var w=2 -var p=2 -var s=2 -var l=4 -var f=4 -var d=8 -var NAME=i8086 -var M=i86 -var LIB=mach/i86/lib/tail_ -var ALIB=mach/i86/lib/sat_tail_ -var RT=mach/i86/lib/head_ -var ART=mach/i86/lib/sat_head_ -var CCP_F=-Dunix -var INCLUDES=-I{EM}/include -I/usr/include -name be - from .m - to .s - program {EM}/lib/{M}_cg - args < - prop > - need .e -end -name asld - from .s.a - to a.out - program {EM}/lib/{M}_as - mapflag -l* LNAME={EM}/{LIB}* - args (.e:{HEAD}={EM}/{ART}em) \ -({RTS}:.c={EM}/{RT}cc) ({RTS}:.p={EM}/{RT}pc) -o > < \ -(.p:{TAIL}={EM}/{LIB}pc) (.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) \ -(.c.p:{TAIL}={EM}/{ALIB}mon) (.c.p.e:{TAIL}={EM}/{LIB}alo) \ -(.e:{TAIL}={EM}/{LIB}em) - prop C -end diff --git a/lib/minix/include/minix/error.h b/lib/minix/include/minix/error.h deleted file mode 100644 index 302207f20..000000000 --- a/lib/minix/include/minix/error.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Error codes. They are negative since a few system calls, such as READ, can - * either return a positive number indicating success, or an error code. - */ - -#define NERROR 34 -#define OK 0 -#define ERROR -1 -#define EPERM -1 -#define ENOENT -2 -#define ESRCH -3 -#define EINTR -4 -#define EIO -5 -#define ENXIO -6 -#define E2BIG -7 -#define ENOEXEC -8 -#define EBADF -9 -#define ECHILD -10 -#define EAGAIN -11 -#define ENOMEM -12 -#define EACCES -13 -#define EFAULT -14 -#define ENOTBLK -15 -#define EBUSY -16 -#define EEXIST -17 -#define EXDEV -18 -#define ENODEV -19 -#define ENOTDIR -20 -#define EISDIR -21 -#define EINVAL -22 -#define ENFILE -23 -#define EMFILE -24 -#define ENOTTY -25 -#define ETXTBSY -26 -#define EFBIG -27 -#define ENOSPC -28 -#define ESPIPE -29 -#define EROFS -30 -#define EMLINK -31 -#define EPIPE -32 -#define EDOM -33 -#define ERANGE -34 - -#define E_LOCKED -101 -#define E_BAD_CALL -102 -#define E_LONG_STRING -103 -#define EOF -104 /* End Of File - used by drivers */ - -/* The following error codes are generated by the kernel itself. */ -#define E_BAD_DEST -1 /* destination address illegal */ -#define E_BAD_SRC -2 /* source address illegal */ -#define E_TRY_AGAIN -3 /* can't send-- tables full */ -#define E_OVERRUN -4 /* interrupt for task that is not waiting */ -#define E_BAD_BUF -5 /* message buf outside caller's addr space */ -#define E_TASK -6 /* can't send to task */ -#define E_NO_MESSAGE -7 /* RECEIVE failed: no message present */ -#define E_NO_PERM -8 /* ordinary users can't send to tasks */ -#define E_BAD_FCN -9 /* only valid fcns are SEND, RECEIVE, BOTH */ -#define E_BAD_ADDR -10 /* bad address given to utility routine */ -#define E_BAD_PROC -11 /* bad proc number given to utility */ diff --git a/lib/minix/include/minix/sgtty.h b/lib/minix/include/minix/sgtty.h deleted file mode 100644 index 302207f20..000000000 --- a/lib/minix/include/minix/sgtty.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Error codes. They are negative since a few system calls, such as READ, can - * either return a positive number indicating success, or an error code. - */ - -#define NERROR 34 -#define OK 0 -#define ERROR -1 -#define EPERM -1 -#define ENOENT -2 -#define ESRCH -3 -#define EINTR -4 -#define EIO -5 -#define ENXIO -6 -#define E2BIG -7 -#define ENOEXEC -8 -#define EBADF -9 -#define ECHILD -10 -#define EAGAIN -11 -#define ENOMEM -12 -#define EACCES -13 -#define EFAULT -14 -#define ENOTBLK -15 -#define EBUSY -16 -#define EEXIST -17 -#define EXDEV -18 -#define ENODEV -19 -#define ENOTDIR -20 -#define EISDIR -21 -#define EINVAL -22 -#define ENFILE -23 -#define EMFILE -24 -#define ENOTTY -25 -#define ETXTBSY -26 -#define EFBIG -27 -#define ENOSPC -28 -#define ESPIPE -29 -#define EROFS -30 -#define EMLINK -31 -#define EPIPE -32 -#define EDOM -33 -#define ERANGE -34 - -#define E_LOCKED -101 -#define E_BAD_CALL -102 -#define E_LONG_STRING -103 -#define EOF -104 /* End Of File - used by drivers */ - -/* The following error codes are generated by the kernel itself. */ -#define E_BAD_DEST -1 /* destination address illegal */ -#define E_BAD_SRC -2 /* source address illegal */ -#define E_TRY_AGAIN -3 /* can't send-- tables full */ -#define E_OVERRUN -4 /* interrupt for task that is not waiting */ -#define E_BAD_BUF -5 /* message buf outside caller's addr space */ -#define E_TASK -6 /* can't send to task */ -#define E_NO_MESSAGE -7 /* RECEIVE failed: no message present */ -#define E_NO_PERM -8 /* ordinary users can't send to tasks */ -#define E_BAD_FCN -9 /* only valid fcns are SEND, RECEIVE, BOTH */ -#define E_BAD_ADDR -10 /* bad address given to utility routine */ -#define E_BAD_PROC -11 /* bad proc number given to utility */ diff --git a/lib/minix/include/minix/stat.h b/lib/minix/include/minix/stat.h deleted file mode 100644 index 4c8b018fd..000000000 --- a/lib/minix/include/minix/stat.h +++ /dev/null @@ -1,26 +0,0 @@ -struct stat { - short int st_dev; - unsigned short st_ino; - unsigned short st_mode; - short int st_nlink; - short int st_uid; - short int st_gid; - short int st_rdev; - long st_size; - long st_atime; - long st_mtime; - long st_ctime; -}; - -/* Some common definitions. */ -#define S_IFMT 0170000 /* type of file */ -#define S_IFDIR 0040000 /* directory */ -#define S_IFCHR 0020000 /* character special */ -#define S_IFBLK 0060000 /* block special */ -#define S_IFREG 0100000 /* regular */ -#define S_ISUID 04000 /* set user id on execution */ -#define S_ISGID 02000 /* set group id on execution */ -#define S_ISVTX 01000 /* save swapped text even after use */ -#define S_IREAD 00400 /* read permission, owner */ -#define S_IWRITE 00200 /* write permission, owner */ -#define S_IEXEC 00100 /* execute/search permission, owner */ diff --git a/lib/minix/include/sys/dir.h b/lib/minix/include/sys/dir.h deleted file mode 100644 index 91bb04ac2..000000000 --- a/lib/minix/include/sys/dir.h +++ /dev/null @@ -1,17 +0,0 @@ -/* The header gives the layout of a directory. */ - -#ifndef _DIR_H -#define _DIR_H - -#define DIRBLKSIZ 512 /* size of directory block */ - -#ifndef DIRSIZ -#define DIRSIZ 14 -#endif - -struct direct { - ino_t d_ino; - char d_name[DIRSIZ]; -}; - -#endif /* _DIR_H */ diff --git a/lib/minixST/include/minix/callnr.h b/lib/minixST/include/minix/callnr.h deleted file mode 100644 index 9ecc2d954..000000000 --- a/lib/minixST/include/minix/callnr.h +++ /dev/null @@ -1,58 +0,0 @@ -#define NCALLS 70 /* number of system calls allowed */ - -#define EXIT 1 -#define FORK 2 -#define READ 3 -#define WRITE 4 -#define OPEN 5 -#define CLOSE 6 -#define WAIT 7 -#define CREAT 8 -#define LINK 9 -#define UNLINK 10 -#define CHDIR 12 -#define TIME 13 -#define MKNOD 14 -#define CHMOD 15 -#define CHOWN 16 -#define BRK 17 -#define STAT 18 -#define LSEEK 19 -#define GETPID 20 -#define MOUNT 21 -#define UMOUNT 22 -#define SETUID 23 -#define GETUID 24 -#define STIME 25 -#define PTRACE 26 -#define ALARM 27 -#define FSTAT 28 -#define PAUSE 29 -#define UTIME 30 -#define ACCESS 33 -#define SYNC 36 -#define KILL 37 -#define RENAME 38 -#define MKDIR 39 -#define RMDIR 40 -#define DUP 41 -#define PIPE 42 -#define TIMES 43 -#define SETGID 46 -#define GETGID 47 -#define SIGNAL 48 -#define IOCTL 54 -#define FCNTL 55 -#define EXEC 59 -#define UMASK 60 -#define CHROOT 61 - -/* The following are not system calls, but are processed like them. */ -#define KSIG 64 /* kernel detected a signal */ -#define UNPAUSE 65 /* to MM or FS: check for EINTR */ -#define BRK2 66 /* to MM: used to say how big FS & INIT are */ -#define REVIVE 67 /* to FS: revive a sleeping process */ -#define TASK_REPLY 68 /* to FS: reply code from tty task */ - -/* The following IS a system call for amoeba transactions */ -#define AM_SYSCALL 69 diff --git a/lib/minixST/include/minix/com.h b/lib/minixST/include/minix/com.h deleted file mode 100644 index 2096f8ba7..000000000 --- a/lib/minixST/include/minix/com.h +++ /dev/null @@ -1,166 +0,0 @@ -/* System calls. */ -#define SEND 1 /* function code for sending messages */ -#define RECEIVE 2 /* function code for receiving messages */ -#define BOTH 3 /* function code for SEND + RECEIVE */ -#define ANY (NR_PROCS+100) /* receive(ANY, buf) accepts from any source */ - -/* Task numbers, function codes and reply codes. */ - -#define TTY -NR_TASKS /* terminal I/O class */ -# define TTY_READ 3 /* fcn code for reading from tty */ -# define TTY_WRITE 4 /* fcn code for writing to tty */ -# define TTY_IOCTL 5 /* fcn code for ioctl */ -# define TTY_SETPGRP 6 /* fcn code for setpgrp */ -# define TTY_OPEN 7 /* fcn code for opening tty */ -# define TTY_CLOSE 8 /* fcn code for closing tty */ -# define SUSPEND -998 /* used in interrupts when tty has no data */ - -#ifdef AM_KERNEL -#define AMOEBA -#endif - -#ifdef AMOEBA - -/* There are AM_NTASK copies of the amoeba kernel task. - * If you change AM_NTASKS be sure to adjust kernel/table.c and fs/table.c - */ -#define AM_NTASKS 4 /* number of kernel tasks of this class */ - -#define AMINT_CLASS (TTY+1) /* Amoeba event handler */ -#define AMOEBA_CLASS (AMINT_CLASS+AM_NTASKS) /* transaction handlers */ -# define ETHER_ARRIV 1 /* fcn code for packet arrival */ -# define AM_TRANS 2 /* amoeba transaction */ -# define AM_GETREQ 3 /* amoeba getrequest */ -# define AM_PUTREP 4 /* amoeba putrep */ -# define AM_REVIVE 6 /* used by kernel task to revive luser task */ -# define AM_TIMEOUT 8 /* used to talk to clock task */ -# define AM_PUTSIG 9 /* when the luser hits the DEL ! */ -# define AM_TASK_DIED 10 /* sent if task died during a transaction */ - -#else /* if AMOEBA not defined */ - -#define AMOEBA_CLASS TTY - -#endif /* AMOEBA */ - -/* - * New class definitions should go here and should be defined relative - * to AMOEBA_CLASS (ie. as AMOEBA_CLASS+n, for the nth task added). - */ - -#define IDLE (AMOEBA_CLASS+1) /* task to run when there's nothing to run */ - -#define PRINTER -7 /* printer I/O class */ -/* The printer uses the same commands as TTY. */ - -#define WINCHESTER -6 /* winchester (hard) disk class */ -#define FLOPPY -5 /* floppy disk class */ -# define DISK_READ 3 /* fcn code to DISK (must equal TTY_READ) */ -# define DISK_WRITE 4 /* fcn code to DISK (must equal TTY_WRITE) */ -# define DISK_IOCTL 5 /* fcn code for setting up RAM disk */ -# define SCATTERED_IO 6 /* fcn code for multiple reads/writes */ -# define OPTIONAL_IO 16 /* modifier to DISK_* codes within vector */ - -#define MEM -4 /* /dev/ram, /dev/(k)mem and /dev/null class */ -# define RAM_DEV 0 /* minor device for /dev/ram */ -# define MEM_DEV 1 /* minor device for /dev/mem */ -# define KMEM_DEV 2 /* minor device for /dev/kmem */ -# define NULL_DEV 3 /* minor device for /dev/null */ -#if (CHIP == INTEL) -# define PORT_DEV 4 /* minor device for /dev/port */ -#endif - -#define CLOCK -3 /* clock class */ -# define SET_ALARM 1 /* fcn code to CLOCK, set up alarm */ -# define GET_TIME 3 /* fcn code to CLOCK, get real time */ -# define SET_TIME 4 /* fcn code to CLOCK, set real time */ -# define REAL_TIME 1 /* reply from CLOCK: here is real time */ - -#define SYSTASK -2 /* internal functions */ -# define SYS_XIT 1 /* fcn code for sys_xit(parent, proc) */ -# define SYS_GETSP 2 /* fcn code for sys_sp(proc, &new_sp) */ -# define SYS_SIG 3 /* fcn code for sys_sig(proc, sig) */ -# define SYS_FORK 4 /* fcn code for sys_fork(parent, child) */ -# define SYS_NEWMAP 5 /* fcn code for sys_newmap(procno, map_ptr) */ -# define SYS_COPY 6 /* fcn code for sys_copy(ptr) */ -# define SYS_EXEC 7 /* fcn code for sys_exec(procno, new_sp) */ -# define SYS_TIMES 8 /* fcn code for sys_times(procno, bufptr) */ -# define SYS_ABORT 9 /* fcn code for sys_abort() */ -# define SYS_FRESH 10 /* fcn code for sys_fresh() (Atari only) */ -# define SYS_KILL 11 /* fcn code for sys_kill(proc, sig) */ -# define SYS_GBOOT 12 /* fcn code for sys_gboot(procno, bootptr) */ -# define SYS_UMAP 13 /* fcn code for sys_umap(procno, etc) */ -# define SYS_MEM 14 /* fcn code for sys_mem() */ -# define SYS_TRACE 15 /* fcn code for sys_trace(req,pid,addr,data) */ - -#define HARDWARE -1 /* used as source on interrupt generated msgs*/ - -/* Names of message fields for messages to CLOCK task. */ -#define DELTA_TICKS m6_l1 /* alarm interval in clock ticks */ -#define FUNC_TO_CALL m6_f1 /* pointer to function to call */ -#define NEW_TIME m6_l1 /* value to set clock to (SET_TIME) */ -#define CLOCK_PROC_NR m6_i1 /* which proc (or task) wants the alarm? */ -#define SECONDS_LEFT m6_l1 /* how many seconds were remaining */ - -/* Names of message fields used for messages to block and character tasks. */ -#define DEVICE m2_i1 /* major-minor device */ -#define PROC_NR m2_i2 /* which (proc) wants I/O? */ -#define COUNT m2_i3 /* how many bytes to transfer */ -#define POSITION m2_l1 /* file offset */ -#define ADDRESS m2_p1 /* core buffer address */ - -/* Names of message fields for messages to TTY task. */ -#define TTY_LINE m2_i1 /* message parameter: terminal line */ -#define TTY_REQUEST m2_i3 /* message parameter: ioctl request code */ -#define TTY_SPEK m2_l1 /* message parameter: ioctl speed, erasing */ -#define TTY_FLAGS m2_l2 /* message parameter: ioctl tty mode */ -#define TTY_PGRP m2_i3 /* message parameter: process group */ - -/* Names of messages fields used in reply messages from tasks. */ -#define REP_PROC_NR m2_i1 /* # of proc on whose behalf I/O was done */ -#define REP_STATUS m2_i2 /* bytes transferred or error number */ - -/* Names of fields for copy message to SYSTASK. */ -#define SRC_SPACE m5_c1 /* T or D space (stack is also D) */ -#define SRC_PROC_NR m5_i1 /* process to copy from */ -#define SRC_BUFFER m5_l1 /* virtual address where data come from */ -#define DST_SPACE m5_c2 /* T or D space (stack is also D) */ -#define DST_PROC_NR m5_i2 /* process to copy to */ -#define DST_BUFFER m5_l2 /* virtual address where data go to */ -#define COPY_BYTES m5_l3 /* number of bytes to copy */ - -/* Field names for accounting, SYSTASK and miscellaneous. */ -#define USER_TIME m4_l1 /* user time consumed by process */ -#define SYSTEM_TIME m4_l2 /* system time consumed by process */ -#define CHILD_UTIME m4_l3 /* user time consumed by process' children */ -#define CHILD_STIME m4_l4 /* sys time consumed by process' children */ - -#define PROC1 m1_i1 /* indicates a process */ -#define PROC2 m1_i2 /* indicates a process */ -#define PID m1_i3 /* process id passed from MM to kernel */ -#define STACK_PTR m1_p1 /* used for stack ptr in sys_exec, sys_getsp */ -#define PR m6_i1 /* process number for sys_sig */ -#define SIGNUM m6_i2 /* signal number for sys_sig */ -#define FUNC m6_f1 /* function pointer for sys_sig */ -#define MEM_PTR m1_p1 /* tells where memory map is for sys_newmap */ -#define CANCEL 0 /* general request to force a task to cancel */ -#define SIG_MAP m1_i2 /* used by kernel for passing signal bit map */ - -#ifdef AMOEBA - -/* Names of message fields for amoeba tasks */ -#define AM_OP m2_i1 /* one of the above operators */ -#define AM_PROC_NR m2_i2 /* process # of proc doing operation */ -#define AM_COUNT m2_i3 /* size of buffer for operation */ -#define AM_ADDRESS m2_p1 /* address of buffer for operation */ - -/* For communication between MM and AMOEBA_CLASS kernel tasks */ -#define AM_STATUS m2_i3 /* same use as REP_STATUS but for amoeba */ -#define AM_FREE_IT m2_l1 /* 1=not a getreq, 0=is a getreq */ - -/* Special for passing a physical address from the ethernet driver */ -#define AM_PADDR m2_l1 /* to the transaction layer */ - -#endif /* AMOEBA */ - -#define HARD_INT 2 /* fcn code for all hardware interrupts */ diff --git a/lib/minixST/include/minix/const.h b/lib/minixST/include/minix/const.h deleted file mode 100644 index 77fc6fe42..000000000 --- a/lib/minixST/include/minix/const.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 1990 by Prentice-Hall, Inc. Permission is hereby granted - * to redistribute the binary and source programs of this system for - * educational or research purposes. For other use, written permission from - * Prentice-Hall is required. - */ - -#define EXTERN extern /* used in *.h files */ -#define PRIVATE static /* PRIVATE x limits the scope of x */ -#define PUBLIC /* PUBLIC is the opposite of PRIVATE */ -#define FORWARD static /* some compilers require this to be 'static'*/ - -#define TRUE 1 /* used for turning integers into Booleans */ -#define FALSE 0 /* used for turning integers into Booleans */ - -#define HZ 60 /* clock freq (software settable on IBM-PC) */ -#define BLOCK_SIZE 1024 /* # bytes in a disk block */ -#define SUPER_USER (uid_t) 0 /* uid_t of superuser */ - -#define MAJOR 8 /* major device = (dev>>MAJOR) & 0377 */ -#define MINOR 0 /* minor device = (dev>>MINOR) & 0377 */ - -#ifdef AM_KERNEL -#define NR_TASKS 14 /* must be 5 more than without amoeba */ -#else -#define NR_TASKS 9 /* number of tasks in the transfer vector */ -#endif - -#define NR_PROCS 32 /* number of slots in proc table */ -#define NR_SEGS 3 /* # segments per process */ -#define T 0 /* proc[i].mem_map[T] is for text */ -#define D 1 /* proc[i].mem_map[D] is for data */ -#define S 2 /* proc[i].mem_map[S] is for stack */ - -#define MAX_P_LONG 2147483647 /* maximum positive long, i.e. 2**31 - 1 */ - -/* Memory is allocated in clicks. */ -#if (CHIP == INTEL) || (CHIP == M68000) -#define CLICK_SIZE 256 /* unit in which memory is allocated */ -#define CLICK_SHIFT 8 /* log2 of CLICK_SIZE */ -#endif - -#define click_to_round_k(n) \ - ((unsigned) ((((unsigned long) (n) << CLICK_SHIFT) + 512) / 1024)) -#if CLICK_SIZE < 1024 -#define k_to_click(n) ((n) * (1024 / CLICK_SIZE)) -#else -#define k_to_click(n) ((n) / (CLICK_SIZE / 1024)) -#endif - -/* Process numbers of some important processes */ -#define MM_PROC_NR 0 /* process number of memory manager */ -#define FS_PROC_NR 1 /* process number of file system */ -#define INIT_PROC_NR 2 /* init -- the process that goes multiuser */ -#define LOW_USER 2 /* first user not part of operating system */ - -/* Miscellaneous */ -#define BYTE 0377 /* mask for 8 bits */ -#define TO_USER 0 /* flag telling to copy from fs to user */ -#define FROM_USER 1 /* flag telling to copy from user to fs */ -#define READING 0 /* copy data to user */ -#define WRITING 1 /* copy data from user */ - -#if (MACHINE != ATARI) -#define ABS -999 /* this process means absolute memory */ -#endif - -#define WORD_SIZE 2 /* number of bytes per word */ - -#define NIL_PTR (char *) 0 /* generally useful expression */ - -#define NO_NUM 0x8000 /* used as numerical argument to panic() */ -#define SIG_PUSH_BYTES (4*sizeof(int)) /* how many bytes pushed by signal */ - -/* Flag bits for i_mode in the inode. */ -#define I_TYPE 0170000 /* this field gives inode type */ -#define I_REGULAR 0100000 /* regular file, not dir or special */ -#define I_BLOCK_SPECIAL 0060000 /* block special file */ -#define I_DIRECTORY 0040000 /* file is a directory */ -#define I_CHAR_SPECIAL 0020000 /* character special file */ -#define I_NAMED_PIPE 0010000 /* named pipe (FIFO) */ -#define I_SET_UID_BIT 0004000 /* set effective uid_t on exec */ -#define I_SET_GID_BIT 0002000 /* set effective gid_t on exec */ -#define ALL_MODES 0006777 /* all bits for user, group and others */ -#define RWX_MODES 0000777 /* mode bits for RWX only */ -#define R_BIT 0000004 /* Rwx protection bit */ -#define W_BIT 0000002 /* rWx protection bit */ -#define X_BIT 0000001 /* rwX protection bit */ -#define I_NOT_ALLOC 0000000 /* this inode is free */ diff --git a/lib/minixST/include/minix/error.h b/lib/minixST/include/minix/error.h deleted file mode 100644 index 302207f20..000000000 --- a/lib/minixST/include/minix/error.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Error codes. They are negative since a few system calls, such as READ, can - * either return a positive number indicating success, or an error code. - */ - -#define NERROR 34 -#define OK 0 -#define ERROR -1 -#define EPERM -1 -#define ENOENT -2 -#define ESRCH -3 -#define EINTR -4 -#define EIO -5 -#define ENXIO -6 -#define E2BIG -7 -#define ENOEXEC -8 -#define EBADF -9 -#define ECHILD -10 -#define EAGAIN -11 -#define ENOMEM -12 -#define EACCES -13 -#define EFAULT -14 -#define ENOTBLK -15 -#define EBUSY -16 -#define EEXIST -17 -#define EXDEV -18 -#define ENODEV -19 -#define ENOTDIR -20 -#define EISDIR -21 -#define EINVAL -22 -#define ENFILE -23 -#define EMFILE -24 -#define ENOTTY -25 -#define ETXTBSY -26 -#define EFBIG -27 -#define ENOSPC -28 -#define ESPIPE -29 -#define EROFS -30 -#define EMLINK -31 -#define EPIPE -32 -#define EDOM -33 -#define ERANGE -34 - -#define E_LOCKED -101 -#define E_BAD_CALL -102 -#define E_LONG_STRING -103 -#define EOF -104 /* End Of File - used by drivers */ - -/* The following error codes are generated by the kernel itself. */ -#define E_BAD_DEST -1 /* destination address illegal */ -#define E_BAD_SRC -2 /* source address illegal */ -#define E_TRY_AGAIN -3 /* can't send-- tables full */ -#define E_OVERRUN -4 /* interrupt for task that is not waiting */ -#define E_BAD_BUF -5 /* message buf outside caller's addr space */ -#define E_TASK -6 /* can't send to task */ -#define E_NO_MESSAGE -7 /* RECEIVE failed: no message present */ -#define E_NO_PERM -8 /* ordinary users can't send to tasks */ -#define E_BAD_FCN -9 /* only valid fcns are SEND, RECEIVE, BOTH */ -#define E_BAD_ADDR -10 /* bad address given to utility routine */ -#define E_BAD_PROC -11 /* bad proc number given to utility */ diff --git a/lib/minixST/include/minix/stat.h b/lib/minixST/include/minix/stat.h deleted file mode 100644 index 4c8b018fd..000000000 --- a/lib/minixST/include/minix/stat.h +++ /dev/null @@ -1,26 +0,0 @@ -struct stat { - short int st_dev; - unsigned short st_ino; - unsigned short st_mode; - short int st_nlink; - short int st_uid; - short int st_gid; - short int st_rdev; - long st_size; - long st_atime; - long st_mtime; - long st_ctime; -}; - -/* Some common definitions. */ -#define S_IFMT 0170000 /* type of file */ -#define S_IFDIR 0040000 /* directory */ -#define S_IFCHR 0020000 /* character special */ -#define S_IFBLK 0060000 /* block special */ -#define S_IFREG 0100000 /* regular */ -#define S_ISUID 04000 /* set user id on execution */ -#define S_ISGID 02000 /* set group id on execution */ -#define S_ISVTX 01000 /* save swapped text even after use */ -#define S_IREAD 00400 /* read permission, owner */ -#define S_IWRITE 00200 /* write permission, owner */ -#define S_IEXEC 00100 /* execute/search permission, owner */ diff --git a/lib/minixST/include/minix/type.h b/lib/minixST/include/minix/type.h deleted file mode 100644 index 0669cecae..000000000 --- a/lib/minixST/include/minix/type.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef _TYPE_H -#define _TYPE_H -/* Macros */ -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - -/* Type definitions */ -typedef unsigned short unshort; /* must be 16-bit unsigned */ -typedef unshort block_nr; /* block number */ -typedef unshort zone_nr; /* zone number */ - -#define MAX_BLOCK_NR ((block_nr) 0177777) /* largest block number */ -#define HIGHEST_ZONE ((zone_nr) 0177777) /* largest zone number */ -#define MAX_INODE_NR ((ino_t 0177777) /* largest inode number */ -#define MAX_FILE_POS 017777777777L /* largest legal file offset */ - -#define NO_BLOCK ((block_nr) 0) /* absence of a block number */ -#define NO_ENTRY ((ino_t) 0) /* absence of a dir entry */ -#define NO_ZONE ((zone_nr) 0) /* absence of a zone number */ -#define NO_DEV ((dev_t) ~0) /* absence of a device numb */ - -typedef unshort bit_nr; /* if ino_t & zone_nr both unshort, - then also unshort, else long */ -typedef long zone_type; /* zone size */ - -#if (CHIP == INTEL) -typedef unsigned vir_bytes; /* virtual addresses and lengths in bytes */ -#endif - -#if (CHIP == M68000) -typedef long vir_bytes; /* virtual addresses and lengths in bytes */ -#endif - -typedef unsigned vir_clicks; /* virtual addresses and lengths in clicks */ -typedef long phys_bytes; /* physical addresses and lengths in bytes */ -typedef unsigned phys_clicks; /* physical addresses and lengths in clicks */ -typedef int signed_clicks; /* same length as phys_clicks, but signed */ - -/* Types relating to messages. */ -#define M1 1 -#define M3 3 -#define M4 4 -#define M3_STRING 14 - -typedef struct {int m1i1, m1i2, m1i3; char *m1p1, *m1p2, *m1p3;} mess_1; -typedef struct {int m2i1, m2i2, m2i3; long m2l1, m2l2; char *m2p1;} mess_2; -typedef struct {int m3i1, m3i2; char *m3p1; char m3ca1[M3_STRING];} mess_3; -typedef struct {long m4l1, m4l2, m4l3, m4l4;} mess_4; -typedef struct {char m5c1, m5c2; int m5i1, m5i2; long m5l1, m5l2, m5l3;} mess_5; -#if _ANSI -typedef struct {int m6i1, m6i2, m6i3; long m6l1; void (*m6f1)(int);} mess_6; -#else -typedef struct {int m6i1, m6i2, m6i3; long m6l1; void (*m6f1)();} mess_6; -#endif - -typedef struct { - int m_source; /* who sent the message */ - int m_type; /* what kind of message is it */ - union { - mess_1 m_m1; - mess_2 m_m2; - mess_3 m_m3; - mess_4 m_m4; - mess_5 m_m5; - mess_6 m_m6; - } m_u; -} message; - -#define MESS_SIZE (sizeof(message)) -#define NIL_MESS (message *) 0 - -/* The following defines provide names for useful members. */ -#define m1_i1 m_u.m_m1.m1i1 -#define m1_i2 m_u.m_m1.m1i2 -#define m1_i3 m_u.m_m1.m1i3 -#define m1_p1 m_u.m_m1.m1p1 -#define m1_p2 m_u.m_m1.m1p2 -#define m1_p3 m_u.m_m1.m1p3 - -#define m2_i1 m_u.m_m2.m2i1 -#define m2_i2 m_u.m_m2.m2i2 -#define m2_i3 m_u.m_m2.m2i3 -#define m2_l1 m_u.m_m2.m2l1 -#define m2_l2 m_u.m_m2.m2l2 -#define m2_p1 m_u.m_m2.m2p1 - -#define m3_i1 m_u.m_m3.m3i1 -#define m3_i2 m_u.m_m3.m3i2 -#define m3_p1 m_u.m_m3.m3p1 -#define m3_ca1 m_u.m_m3.m3ca1 - - -#define m4_l1 m_u.m_m4.m4l1 -#define m4_l2 m_u.m_m4.m4l2 -#define m4_l3 m_u.m_m4.m4l3 -#define m4_l4 m_u.m_m4.m4l4 - -#define m5_c1 m_u.m_m5.m5c1 -#define m5_c2 m_u.m_m5.m5c2 -#define m5_i1 m_u.m_m5.m5i1 -#define m5_i2 m_u.m_m5.m5i2 -#define m5_l1 m_u.m_m5.m5l1 -#define m5_l2 m_u.m_m5.m5l2 -#define m5_l3 m_u.m_m5.m5l3 - -#define m6_i1 m_u.m_m6.m6i1 -#define m6_i2 m_u.m_m6.m6i2 -#define m6_i3 m_u.m_m6.m6i3 -#define m6_l1 m_u.m_m6.m6l1 -#define m6_f1 m_u.m_m6.m6f1 - -struct mem_map { - vir_clicks mem_vir; /* virtual address */ - phys_clicks mem_phys; /* physical address */ - vir_clicks mem_len; /* length */ -}; - -struct copy_info { /* used by sys_copy(src, dst, bytes) */ - int cp_src_proc; - int cp_src_space; - vir_bytes cp_src_vir; - int cp_dst_proc; - int cp_dst_space; - vir_bytes cp_dst_vir; - vir_bytes cp_bytes; -}; - -struct iorequest_s { - long io_position; /* position in device file (really off_t) */ - char *io_buf; /* buffer in user space */ - unsigned short io_nbytes; /* size of request */ - unsigned short io_request; /* read, write (optionally) */ -}; -#endif /* _TYPE_H */ diff --git a/lib/vax4/descr.src b/lib/vax4/descr.src deleted file mode 100644 index 576732171..000000000 --- a/lib/vax4/descr.src +++ /dev/null @@ -1,74 +0,0 @@ -# $Revision$ -var w=4 -var p=4 -var s=2 -var l=4 -var f=4 -var d=8 -var NAME=vax4 -var M=vax4 -var LIB=lib/{M}/tail_ -var RT=lib/{M}/head_ -var CPP_F=-Dunix -Dvax -var CC_ALIGN=-Vw4.1 -# 413 align is the default, rom in text -var ALIGN=-a0:4 -a1:4 -a2:0x400 -a3:4 -var C_LIB={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g -var OLD_C_LIB={C_LIB} -name be - from .m.g - to .s - program {EM}/lib/{M}/cg - args < - stdout - need .e -end -name asopt - from .s - to .so - program {EM}/lib/{M}/top - args - optimizer - stdin - stdout -end -name as - from .s.so - to .o - program {EM}/lib/{M}/as - args - -o > < - prep cond -end -name led - from .o.a - to .out - program {EM}/lib/em_led - mapflag -l* LNAME={EM}/{LIB}* - mapflag -N ALIGN=-a0:4 -a1:4 -a2:4 -a3:4 - mapflag -r ALIGN=-a0:4 -a1:0x400 -a2:4 -a3:4 - mapflag -ansi C_LIB={EM}/{LIB}ac - args {ALIGN} (.e:{HEAD}= {EM}/{RT}em) \ - ({RTS}:.ocm.b={EM}/{RT}cc) \ - ({RTS}{ANSI?}:.c={EM}/{RT}cc) \ - ({RTS}{ANSI?}:.cansi={EM}/{RT}ac) \ - ({RTS}:.mod={EM}/{RT}m2) \ - ({RTS}:.p.8={EM}/{RT}pc) \ - -o > < \ - (.8:{TAIL}={EM}/{LIB}a68s) \ - (.p.8:{TAIL}={EM}/{LIB}pc) \ - (.b:{TAIL}={EM}/{LIB}bc) \ - (.ocm:{TAIL}={EM}/{LIB}ocm) \ - (.mod:{TAIL}={EM}/{LIB}m2) \ - (.ocm.b:{TAIL}={OLD_C_LIB}) \ - (.c:{TAIL}={C_LIB}) \ - (.e:{TAIL}={EM}/{LIB}em {EM}/{LIB}mon {EM}/lib/{M}/end_em) - linker -end -name cv - from .out - to .cv - program {EM}/lib/{M}/cv - mapflag -n CV_ARG=-n - args {CV_ARG?} < > - outfile a.out -end diff --git a/lib/vax4/sedf b/lib/vax4/sedf deleted file mode 100644 index b26db01c9..000000000 --- a/lib/vax4/sedf +++ /dev/null @@ -1,104 +0,0 @@ -# $Header$ -/movab/ { -s/movab 1(\(.*\)),\1$/incl \1/ -s/movab -1(\(.*\)),\1$/decl \1/ -s/movab \([0-9]*\)(\(.*\)),\2$/addl2 $\1,\2/ -s/movab -\([0-9]*\)(\(.*\)),\2$/subl2 $\1,\2/ -s/movab 0(\(.*\)) \[\(.*\)\],\1$/addl2 \2,\1/ -s/movab 0(\(.*\)) \[\(.*\)\],\2$/addl2 \1,\2/ -} -/$0/ { -s/movz[bw]\([wl]\) $0,/clr\1 / -s/mov\([bwl]\) $0,/clr\1 / -s/cvt[bw]\([wl]\) $0,/clr\1 / -} -/add/ { -s/\(add[fdlw]\)3 \(.*\),\(.*\),\3$/\12 \2,\3/ -s/\(add[fdlw]\)3 \(.*\),\(.*\),\2$/\12 \3,\2/ -s/add\([wl]\)2 \$-\([0-9]*\),/sub\12 $\2,/ -s/add\([wl]\)3 \$-\([0-9]*\),/sub\13 $\2,/ -s/add\([wl]\)3 \(.*\),\$-\([0-9]*\),/sub\13 $\3,\2,/ -} -/mul/ { -s/\(mul[fdlw]\)3 \(.*\),\(.*\),\3$/\12 \2,\3/ -s/\(mul[fdlw]\)3 \(.*\),\(.*\),\2$/\12 \3,\2/ -} -/sub/ { -s/\(sub[fdlw]\)3 \(.*\),\(.*\),\3$/\12 \2,\3/ -s/sub\([wl]\)2 \$-\([0-9]*\),/add\12 $\2,/ -s/sub\([wl]\)3 \$-\([0-9]*\),/add\13 $\2,/ -} -/div/s/\(div[fdlw]\)3 \(.*\),\(.*\),\3$/\12 \2,\3/ -/bi/s/\(bi[cs][lw]\)3 \(.*\),\(.*\),\3$/\12 \2,\3/ -/bis/s/\(bis[lw]\)3 \(.*\),\(.*\),\2$/\12 \3,\2/ -/xor/ { -s/\(xor[lw]\)3 \(.*\),\(.*\),\3$/\12 \2,\3/ -s/\(xor[lw]\)3 \(.*\),\(.*\),\2$/\12 \3,\2/ -} -/$1/ { -s/add\([wl]\)2 \$1,/inc\1 / -s/sub\([wl]\)2 \$1,/dec\1 / -} -/$-1/ { -s/add\([wl]\)2 \$-1,/dec\1 / -s/sub\([wl]\)2 \$-1,/inc\1 / -} -/cmp[bwl].*$0/ { -N -s/cmp\([bwl]\) \(.*\),$0$/tst\1 \2/ -s/cmp\([bwl]\) $0,\(.*\)\njneq/tst\1 \2\ -jneq/ -s/cmp\([bwl]\) $0,\(.*\)\njeql/tst\1 \2\ -jeql/ -s/cmp\([bwl]\) $0,\(.*\)\njgtr/tst\1 \2\ -jlss/ -s/cmp\([bwl]\) $0,\(.*\)\njlss/tst\1 \2\ -jgtr/ -s/cmp\([bwl]\) $0,\(.*\)\njgeq/tst\1 \2\ -jleq/ -s/cmp\([bwl]\) $0,\(.*\)\njleq/tst\1 \2\ -jgeq/ -P -D -} -/(sp)+/ { -N -s/movl (sp)+,\(.*\)\npushl \1$/movl (sp),\1/ -s/tst[wl] (sp)+\nmovl fp,sp$/movl fp,sp/ -s/tst\([wl]\) (sp)+\nmov\1 \(.*\),-(sp)/mov\1 \2,(sp)/ -s/tst\([wl]\) (sp)+\nclr\1 -(sp)/clr\1 (sp)/ -s/tst\([wl]\) (sp)+\nmovzb\1 \(.*\),-(sp)/movzb\1 \2,(sp)/ -s/tst\([wl]\) (sp)+\ncvtb\1 \(.*\),-(sp)/cvtb\1 \2,(sp)/ -s/tst\([wl]\) (sp)+\ntst\1 \(.*\)$/mov\1 \2,(sp)+/ -s/tstl (sp)+\npushl \(.*\)$/movl \1,(sp)/ -s/tstl (sp)+\npusha\([bwlq]\) \(.*\)$/mova\1 \2,(sp)/ -P -D -} -/^addl2 .*,sp/ { -N -s/addl2 .*,sp\nmovl fp,sp$/movl fp,sp/ -s/^addl2 $6,sp\nmovw \(.*\),-(sp)/tstl (sp)+\ -movw \1,(sp)/ -s/^addl2 $6,sp\nclrw -(sp)/tstl (sp)+\ -clrw (sp)/ -s/^addl2 $8,sp\nmovq \(.*\),-(sp)/movq \1,(sp)/ -P -D -} -/clrw -(sp)/ { -N -s/clrw -(sp)\nmovw \($[0-9]*\),-(sp)/pushl \1/ -s/clrw -(sp)\nmnegw $\([0-9]*\),-(sp)/movzwl $-\1,-(sp)/ -s/clrw -(sp)\nmovw \(.*\),-(sp)/movzwl \1,-(sp)/ -s/clrw -(sp)\ncvtbw \(\$[0-9]*\),-(sp)/pushl \1/ -s/clrw -(sp)\ncvtbw \(\$.*\),-(sp)/movzwl \1,-(sp)/ -P -D -} -/mov/ { -N -s/mov\([wl]\) \(.*\),\(.*\)\ntst\1 \3$/mov\1 \2,\3/ -P -D -} diff --git a/mach/6500/as/Makefile b/mach/6500/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/6500/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/6500/cg/Makefile b/mach/6500/cg/Makefile deleted file mode 100644 index 22f5f603c..000000000 --- a/mach/6500/cg/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -# $Header$ - -EMHOME=../../.. -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-hbxac -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/cg -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \ - $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \ - $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\ - move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - ../../install cg - -cmp: all - -../../compare cg - -distr: tables.c - rm -f tables1.[ch] - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - - -tables.c: table - -mv tables.h tables.h.save - $(EMHOME)/lib/cpp -P table | $(EMHOME)/lib/cgg > debug.out - -if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi - -if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) -clean: - rm -f *.o tables.c tables.h debug.out cg tables.h.save - -codegen.o: $(CDIR)/assert.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -move.o: $(CDIR)/assert.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/6500/dl/Makefile b/mach/6500/dl/Makefile deleted file mode 100644 index d1b1ba848..000000000 --- a/mach/6500/dl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -EMHOME=../../.. -CFLAGS=-O -I$(EMHOME)/h - -dl: dl.o - $(CC) -o dl dl.o $(EMHOME)/modules/lib/libobject.a - -install: dl - ../../install dl - -cmp: dl - -../../compare dl - -opr: - make pr | opr - -pr: - @pr `pwd`/dl.c - -clean: - -rm -f *.o *.old dl diff --git a/mach/6500/libem/Makefile b/mach/6500/libem/Makefile deleted file mode 100644 index 42daff56c..000000000 --- a/mach/6500/libem/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -all: - -install: - ../../install head_em.s head_em - ../../install libem_s.a tail_em - ../../install end.s end_em - -cmp: - -../../compare head_em.s head_em - -../../compare libem_s.a tail_em - -../../compare end.s end_em - -opr: - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/end.s - -clean: diff --git a/mach/6500/libem/end.s b/mach/6500/libem/end.s deleted file mode 100644 index 1bb218ebb..000000000 --- a/mach/6500/libem/end.s +++ /dev/null @@ -1,17 +0,0 @@ -.define endtext, enddata, endbss, end -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -.sect .text -endtext: -.align 2 -.sect .data -.align 2 -enddata: -.sect .bss -.align 2 -endbss: -end: diff --git a/mach/6500/libem/head_em.s b/mach/6500/libem/head_em.s deleted file mode 100644 index 5e4a1c267..000000000 --- a/mach/6500/libem/head_em.s +++ /dev/null @@ -1,233 +0,0 @@ -.define WRCH, RDCH, Earray, Erange, Eset -.define Eiovfl, Eidivz, Eiund, Econv -.define Estack, Eheap, Eillins, Eoddz -.define Ecase , Ebadmon, OSBYTE, MON -.define Ebadlin, Ebadgto, BASE, NBYTES -.define hol0, IGNMASK, ADDR, PROGNAME -.define LB, LBl, SP, HP, ERRPROC, UNSIGN -.define Ytmp, EXG, ARTH, RETURN, SIGN -.define RETSIZE, TRAPVAL, STACK, BRANCH -.define start, Push, Pop, STACKTh, STACKTl -.define F_DUM -.sect .zero -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! DEFINITIONS - - ! The next three definitions are special for the - ! BBC microcomputer - -WRCH = 0x0FFEE ! This subroutine writes the character in - ! register A to the screen -RDCH = 0x0FFE0 ! This subroutine returns a character in - ! register A from the current input stream -OSBYTE = 0x0FFF4 ! This subroutine performs miscelaneous - ! operating system calls - -F_DUM = 0 ! Dummy floating point constant - - ! Here are the error numbers - -Earray = 0 -Erange = 1 -Eset = 2 -Eiovfl = 3 -Eidivz = 6 -Eiund = 8 -Econv = 10 -Estack = 16 -Eheap = 17 -Eillins = 18 -Eoddz = 19 -Ecase = 20 -Ebadmon = 25 -Ebadlin = 26 -Ebadgto = 27 -MON = 0x78D0 - -BASE = 240 ! This is the offset from the localbase - ! for the second localbase - -STACKTh = 0x78 ! This is the top of the stack -STACKTl = 0x0D0 - - ! Some zeropage declarations - -.sect .zero - -RES: .space 76 ! special for the operating system - -hol0: .space 16 ! the hol0 block - -IGNMASK: .space 2 ! can hold the ingnore mask - -ADDR: .space 4 ! used for indirect addressing - -LB: .space 2 ! the localbase - -LBl: .space 2 ! the second localbase (localbase-BASE) - -SP: .space 3 ! the stackpointer (real_stack) - -HP: .space 2 ! the heap pointer - -BRANCH: .space 2 ! used for branch instructions - -ERRPROC: .space 2 ! can hold the address of the error handler - -Ytmp: .space 1 ! used for intermediate storage in Y - -EXG: .space 2 ! used by the exchange subroutine Exg - -ARTH: .space 16 ! used for arithmetic - -NBYTES: .space 2 ! containes the number of bytes for a block move - - -RETURN: .space 4 ! the return area - -RETSIZE: .space 1 ! the size of the object returned - -SIGN: .space 1 ! the sign of the calculation - -UNSIGN : .space 1 ! is it signed or unsigned arithmetic - -TRAPVAL: .space 1 ! intermediate storage of the error number - -STACK: .space 1 ! contains the hardware stackpointer on - ! entering _m_a_i_n for a neat return - -RESERVED: .space 112 ! used by the operating system - -.sect .text -.base 0x0E02 ! where to start in the BBC micro -! GENERAL PURPOSE ROUTINES - -start: - tsx - stx STACK ! save stackpointer for exit and error - - ! The following three operating system calls are only - ! for the BBC microcomputer - - lda #2 - ldx #0 - ldy #0 - jsr OSBYTE ! return control to the keyboard - lda #15 - ldx #0 - ldy #0 - jsr OSBYTE ! clear all internal buffers - lda #3 - ldx #5 - ldy #0 - jsr OSBYTE ! output to screen and RS423 - - lda #STACKTl - sta LB ! set localbase (lowbyte) - sta SP+2 - lda #0 - sta SP ! set stackpointer (lowbyte) - sta ERRPROC ! set start address for error handler (lowbyte) - sta ERRPROC+1 ! set start address for error handler (highbyte) - sta hol0 ! set the line number (lowbyte) - sta hol0+1 ! set the line number (highbyte) - lda #STACKTh - sta SP+1 ! set the stacpointer (highbyte) - sta LB+1 ! set the localbase (highbyte) - lda #[endbss].l - sta HP ! set the heap pointer (lowbyte) - lda #[endbss].h - sta HP+1 ! set the heap pointer (highbyte) - lda #[PROGNAME].l - sta hol0+4 ! set fake programname pointer (lowbyte) - lda #[PROGNAME].h - sta hol0+5 ! set fake programname pointer (highbyte) - lda #[beginbss].l - sta ADDR ! start address of bss block (lowbyte) - lda #[beginbss].h - sta ADDR+1 ! start address of bss block (highbyte) - ldy #0 - lda #0 - 4: ldx #[endbss].h ! clear bss block - cpx ADDR+1 - bcc 1f ! end of bss block reached - bne 2f - ldx #[endbss].l - cpx ADDR - bcc 1f ! end of bss block reached - 2: sta (ADDR),y - inc ADDR - bne 3f - inc ADDR+1 - 3: jmp 4b - 1: lda #0 - tax - jsr Push ! push fake envelope pointer - lda #[PROGNAME].h - ldx #[PROGNAME].l - jsr Push ! push argv[0] - lda #0 - ldx #1 - jsr Push ! push argc - jsr __m_a_i_n ! start the real program - - lda #0x0FF - jsr WRCH ! send end of program to R423 - lda #3 - ldx #0 - jsr OSBYTE ! send output to screen only - lda #2 - ldx #1 - jsr OSBYTE ! input only from R423 - rts - - -! The subroutine Push pushes the registerpair AX onto the stack. - -Push: - sty Ytmp ! save Y - ldy SP+2 - bne 1f ! lowbyte of stackpointer <> 0 - dec SP+1 ! decrement highbyte of stackpointer - 1: dey - dey ! decrement lowbyte of stackpointer - sty SP+2 ! save lowbyte of stackpointer - pha ! save A - txa - sta (SP),y ! push X onto the stack - iny - pla ! get A - sta (SP),y ! push A onto the stack - ldy Ytmp ! restore Y - rts - - -! The subroutine Pop pops the registerpair AX from the stack. - -Pop: - sty Ytmp ! save Y - ldy SP+2 - lda (SP),y ! pop X from the stack - tax - iny - lda (SP),y ! pop A from the stack - iny - bne 1f ! lowbyte of stackpointer <> 0 - inc SP+1 ! increment highbyte of stackpointer - 1: sty SP+2 ! store lowbyte of stackpointer - pha ! save A - pla ! get A - ldy Ytmp ! restore Y - rts - - -.sect .data -PROGNAME: ! for initialising the programname pointer -.asciz "program" -.sect .bss -beginbss: diff --git a/mach/6500/libem/mon.s b/mach/6500/libem/mon.s deleted file mode 100644 index 1d094c51a..000000000 --- a/mach/6500/libem/mon.s +++ /dev/null @@ -1,40 +0,0 @@ -.define Mon -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! This subroutine performs some monitor calls. -! The exit call just resets the hardware_stackpointer so -! this routine will return to the operating system. -! The close call just returns a zero. -! The ioctl call just pops its arguments and returns a zero. -! The write routine is a real one. - - -Mon: - cpx #1 - bne 1f ! exit - ldx STACK ! load stackpointer - dex - dex ! adjust stackpointer - txs ! set stackpointer - rts - 1: cpx #4 - bne 1f - jmp Mwrite - 1: cpx #6 ! facked - bne 1f ! close - lda #0 - tax ! return zero - rts - 1: cpx #54 - jsr Pop ! pop first argument (fildes) - jsr Pop ! pop second argument (request) - jsr Pop ! pop third argument (argp) - lda #0 - tax ! return zero - rts - - diff --git a/mach/6500/libem/print.s b/mach/6500/libem/print.s deleted file mode 100644 index eea8e73d1..000000000 --- a/mach/6500/libem/print.s +++ /dev/null @@ -1,27 +0,0 @@ -.define Mprint -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! This subroutine prints a zero terminated ascii string. -! The registerpair AX contains the start of the string. -! The subroutine WRCH is a special routine on the BBC microcomputer -! which prints the character in A to the screen. -! The subroutine WRCH is a special one provided by the BBC -! microcomputer. - - -Mprint: - stx ADDR ! start address of string (lowbyte) - sta ADDR+1 ! start address of string (highbyte) - ldy #0 - 1: lda (ADDR),y ! get ascii character - beq 2f - jsr WRCH ! put it on the screen - iny - bne 1b - 2: rts - - diff --git a/mach/6500/libem/printhex.s b/mach/6500/libem/printhex.s deleted file mode 100644 index e1d3e4b31..000000000 --- a/mach/6500/libem/printhex.s +++ /dev/null @@ -1,32 +0,0 @@ -.define Printhex -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! This subroutine print the contents of register A to the screen -! in hexadecimal form. -! The subroutine WRCH is a special one provided by the BBC -! microcomputer. - - -Printhex: - pha ! save A - lsr a - lsr a - lsr a - lsr a ! get four high bits - jsr 1f - pla ! restore A - and #0x0F ! get four low bits - jsr 1f - rts - 1: sed ! print in hex - clc - adc #0x90 - adc #0x40 - cld - jmp WRCH - - diff --git a/mach/6500/libem/printstack.s b/mach/6500/libem/printstack.s deleted file mode 100644 index 27f1512ac..000000000 --- a/mach/6500/libem/printstack.s +++ /dev/null @@ -1,49 +0,0 @@ -.define Printstack -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! This a special subroutine which prints some things to the -! monitorscreen for debugging. - - -Printstack: - ldy #0 - 2: lda (hol0+4),y - beq 1f - jsr WRCH ! print filename - iny - jmp 2b - 1: lda #32 - jsr WRCH ! print a space - lda hol0+1 - jsr Printhex ! print line number (highbyte) - lda hol0 - jsr Printhex ! print line number (lowbyte) - lda #32 - jsr WRCH ! print a space - lda SP+1 - jsr Printhex ! print stackpointer (highbyte) - lda SP+2 - jsr Printhex ! print stackpointer (lowbyte) - lda #32 - jsr WRCH ! print a space - lda LB+1 - jsr Printhex ! print real localbase (highbyte) - lda LB - jsr Printhex ! print real localbase (lowbyte) - lda #32 - jsr WRCH ! print a space - lda LBl+1 - jsr Printhex ! print second lowerbase (highbyte) - lda LBl - jsr Printhex ! print second lowerbase (lowbyte) - lda #10 - jsr WRCH ! print a newline - lda #13 - jsr WRCH ! print a carriagereturn - rts - - diff --git a/mach/6500/libem/read.s b/mach/6500/libem/read.s deleted file mode 100644 index 12d2c58b7..000000000 --- a/mach/6500/libem/read.s +++ /dev/null @@ -1,37 +0,0 @@ -.define Mread -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! This subroutine reads characters from the standard input. -! It ignores the filedes. -! It reads atmost 255 characters. So the runtime system must -! provide a way of dealing with this. -! The subroutine RDCH is a special one provided by the BBC -! microcomputer. - - -Mread: - jsr Pop ! ignore filedescriptor - jsr Pop ! bufptr - stx ADDR ! address of character buffer (lowbyte) - sta ADDR+1 ! address of character buffer (highbyte) - jsr Pop ! number of characters - ldy #0 ! <= 255 - inx - 1: jsr RDCH ! read a character from the current inputstream - bcs 8f - sta (ADDR),y - iny - dex - bne 1b - 8: tya - tax - lda #0 - jsr Push ! number of characters red. - tax ! report a succesfull read. - rts - - diff --git a/mach/6500/libem/write.s b/mach/6500/libem/write.s deleted file mode 100644 index 7b87cf44b..000000000 --- a/mach/6500/libem/write.s +++ /dev/null @@ -1,39 +0,0 @@ -.define Mwrite -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -! This subroutine performs the monitor call write. -! Writing is always done to standardoutput. -! A zero is returned on exit. -! The subroutine WRCH is a special routine of the BBC -! microcomputer. - - -Mwrite: - jsr Pop ! get fildes - jsr Pop ! get address of characterbuffer - stx ADDR ! bufferaddress (lowbyte) - sta ADDR+1 ! bufferaddress (highbyte) - jsr Pop ! number of characters to be writen. - ldy #0 - 1: lda (ADDR),y - cmp #10 - bne 2f - pha - lda #13 - jsr WRCH - pla - 2: jsr WRCH - iny - dex - bne 1b - tya - tax - lda #0 - jsr Push - tax - rts - diff --git a/mach/6800/as/Makefile b/mach/6800/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/6800/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/6805/as/Makefile b/mach/6805/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/6805/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/6809/as/Makefile b/mach/6809/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/6809/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/arm/as/Makefile b/mach/arm/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/arm/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/arm/cv/Makefile b/mach/arm/cv/Makefile deleted file mode 100644 index 40fd83624..000000000 --- a/mach/arm/cv/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -OBJLIB=$(EMHOME)/modules/lib/libobject.a - -head: cv - -cv: cv.c - $(CC) $(CFLAGS) $(LDFLAGS) -I$(EMHOME)/h -o cv cv.c $(OBJLIB) - -install: head - ../../install cv - -cmp: head - ../../compare cv - -clean: - rm -f *.o - -pr: - @pr `pwd`/Makefile `pwd`/cv.c - -opr: - make pr | opr diff --git a/mach/arm/libem/Makefile b/mach/arm/libem/Makefile deleted file mode 100644 index b2c179d96..000000000 --- a/mach/arm/libem/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -all: - -install: - ../../install head_em.s head_em - ../../install libem_s.a tail_em - ../../install end.s end_em - -cmp: - -../../compare head_em.s head_em - -../../compare libem_s.a tail_em - -../../compare end.s end_em - -clean: - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/end.s diff --git a/mach/arm/libem/end.s b/mach/arm/libem/end.s deleted file mode 100644 index e31db94e0..000000000 --- a/mach/arm/libem/end.s +++ /dev/null @@ -1,16 +0,0 @@ -.define _endtext,_enddata,_endbss -.sect .text - .align 4 -.sect .rom - .align 4 -.sect .data - .align 4 -.sect .bss - .align 4 - - .sect .text -_endtext: - .sect .data -_enddata: - .sect .bss -_endbss: diff --git a/mach/arm/libem/head_em.s b/mach/arm/libem/head_em.s deleted file mode 100644 index 26040b600..000000000 --- a/mach/arm/libem/head_em.s +++ /dev/null @@ -1,178 +0,0 @@ -! head_em.s -.define begdat,begbss,hol0,argv,envp,_RegHp,_incptflag -.define _Lineno,_Filna,_IgnoreMask,_TrpReg - -.sect .text -.sect .rom -.sect .data -.sect .bss - -.sect .text -.base 0x8000 - ADR R0,begbss - ADR R1,_endbss - MOV R2,#0 - ADR R3,_incptflag - STR R2,[R3] -1: - STR R2,[R0],#4 - CMP R0,R1 - BLT 1B -! the next 2 lines are OS specific: - SWI 16 ! OS_Getenv - SUB R12, R1, #8 ! Get end of ram -! R0 points to command string -! (argv,argc) code for C -! or Pascal file names - MOV R9,R0 ! save pt in R0 - MOV R8,#0 ! string length -len: - LDR.B R7,[R9],#1 - CMP R7,#0 - ADD.NE R8,R8,#1 - BNE len - MOV R7,R8 ! save len in R7 -! round up to multiple of 4 - ADD R8,R8,#4 - MVN R6, #3 !FFFFFFFC - AND R8,R8,R6 -! make room on stack - SUB R12,R12,R8 ! word aligned -! now determine argc -! OS intercepts blank lines, so -! there must be at least one arg - MOV R9,R0 - MOV R6,#0 ! holds argc - MOV R5,#0 ! char count -loop1: - CMP R5,R7 - BGT next1 - LDR.B R4,[R9],#1 - ADD R5,R5,#1 - CMP R4,#32 - BEQ loop1 !skip spaces - ADD R6,R6,#1 ! new arg -nospace1: - CMP R5,R7 - BGT next1 - LDR.B R4,[R9],#1 - ADD R5,R5,#1 - CMP R4,#32 - BNE nospace1 - CMP R5,R7 - BCC loop1 -! BEQ loop1 -next1: -! store argc - ADR R5,argc - STR R6,[R5] -! copy the string -! onto the stack - MOV R9,R0 !source - MOV R2,R12 !dest - MOV R3,R7 !#chars -loop2: - LDR.B R4,[R9],#1 - STR.B R4,[R2],#1 - SUB.S R3,R3,#1 - BNE loop2 - MOV R4, #0 ! zero terminator - STR.B R4,[R2] -! create space on the stack for -! the pointers to individual args - MOV R11, R12 ! string pt - MOV R8,R6,LSL #2 - SUB R12,R12,R8 -! save pointer to argv[0] - ADR R1,argv - STR R12,[R1] -! determine argv[0] .. argv[argc-1] -! and store on stack -! R11 = start of string -! R7 = string lenth -! R12 = stack pointer -! R6 = argc - MOV R9, #0 !char count - MOV R8, #0 !arg count - MOV R5,R11 -loop3: - CMP R9,R7 - BGT next2 - LDR.B R4,[R5],#1 - ADD R9,R9,#1 - CMP R4,#32 - BEQ loop3 - CMP R9,R7 - BGT next2 - SUB R4,R5,#1 !compensate for incr - STR R4,[R12,R8,LSL #2] - ADD R8,R8,#1 -nospace2: - CMP R9,R7 - BGT next2 - LDR.B R4,[R5],#1 - ADD R9,R9,#1 - CMP R4,#32 - BNE nospace2 - CMP R9,R7 - BCC loop3 -! BEQ loop3 -! finally, replace spaces by 0 -next2: - MOV R5,R11 !string ptr - MOV R6,R7 !string length - MOV R3,#0 -loop4: - CMP R6,#0 - BEQ next3 - LDR.B R4,[R5] - CMP R4,#32 - STR.EQ.B R3,[R5] - ADD R5,R5,#1 - SUB R6,R6,#1 - BAL loop4 -next3: - ADR R11, envp - STMFD R12<,{R11} - ADR R11,argv - LDR R11,[R11] - STMFD R12<,{R11} - ADR R11, argc - LDR R11,[R11] - STMFD R12<,{R11} - BAL.L __m_a_i_n - MOV R11,#0 - STMFD R12<,{R11} - MOV R11,#1 - STMFD R12<,{R11} - BAL.L _EmMon - -.sect .bss -begbss: -.sect .data -begdat: -hol0: - .data4 0 - .data4 0 -argv: - .data4 0 -envp: - .data4 0 -argc: -.data4 0 -2: - .asciz 'PROGRAM' - .align -_RegHp: - .data4 _endbss -_Lineno: - .data4 0 -_Filna: - .data4 0 -_IgnoreMask: - .data4 0 -_TrpReg: - .data4 0 -_incptflag: -.data4 0 - diff --git a/mach/arm/libfp/Makefile b/mach/arm/libfp/Makefile deleted file mode 100644 index eceeb76a5..000000000 --- a/mach/arm/libfp/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -SUF=so -MAKEFILE=$(EMHOME)/mach/proto/fp/Makefile -MACHDEF="MACH=arm" "CFLAGS=-DUSE_DIVIDE" "SUF=$(SUF)" "ASAR=arch" - -all: - make -f $(MAKEFILE) $(MACHDEF) all - -install: - make -f $(MAKEFILE) $(MACHDEF) install - -cmp: all - -../../compare FP_$(MACH).a tail_fp - -clean: - make -f $(MAKEFILE) $(MACHDEF) clean - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/arm/libmon/Makefile b/mach/arm/libmon/Makefile deleted file mode 100644 index 1df001383..000000000 --- a/mach/arm/libmon/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -all: - -install: - ../../install libros_s.a tail_ros - -cmp: - -../../compare libros_s.a tail_ros - -clean: - -opr : - make pr | opr - -pr: - @arch pv libros_s.a | pr -h `pwd`/libros_s.a diff --git a/mach/arm/ncg/Makefile b/mach/arm/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/arm/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/arm/top/Makefile b/mach/arm/top/Makefile deleted file mode 100644 index 57908427f..000000000 --- a/mach/arm/top/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -EMHOME=../../.. -LIBS=$(EMHOME)/modules/lib/libstring.a -PREFLAGS=-I. -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -DNDEBUG -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -CDIR=$(EMHOME)/mach/proto/top -CFILES=$(CDIR)/top.c $(CDIR)/queue.c -OFILES=top.o queue.o - -all: gen.c - make top - -top: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LIBS) -o top - -top.o: $(CDIR)/top.c gen.c - $(CC) -c $(CFLAGS) $(CDIR)/top.c - -queue.o: $(CDIR)/queue.c - $(CC) -c $(CFLAGS) $(CDIR)/queue.c - -install: all - $(EMHOME)/mach/install top - -cmp: all - -$(EMHOME)/mach/compare top - -gen.c: table - $(EMHOME)/lib/topgen table - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) - -clean: - rm -f *.o gen.c gen.h top - -top.o: gen.h -top.o: $(CDIR)/top.h -top.o: $(CDIR)/queue.h -queue.o: $(CDIR)/queue.h diff --git a/mach/compare b/mach/compare deleted file mode 100755 index fc54003f9..000000000 --- a/mach/compare +++ /dev/null @@ -1,7 +0,0 @@ -case $# in -1) DEST="$1" ;; -2) DEST="$2" ;; -*) echo $0 [source] destination ;; -esac -MACH=`(cd .. ; basename \`pwd\`)` -cmp "$1" ../../../lib/${MACH}/$DEST diff --git a/mach/i386/as/Makefile b/mach/i386/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/i386/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/i386/ce/Makefile b/mach/i386/ce/Makefile deleted file mode 100644 index b08bc0fda..000000000 --- a/mach/i386/ce/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -EMHOME = ../../.. -CEG = $(EMHOME)/lib/ceg/util -OBJ = obj - -all: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) - -install: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) install - -cmp: - -make -f $(CEG)/make_asobj "OBJ="$(OBJ) cmp - -pr: - @pr Makefile EM_table mach.h mach.c as_table as.h as.c - -opr: - make pr | opr - -# total cleanup -clean: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) clean - -# only remove ce, ceg, and back directories -dclean: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) dclean diff --git a/mach/i386/cv/Makefile b/mach/i386/cv/Makefile deleted file mode 100644 index 845481fc6..000000000 --- a/mach/i386/cv/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - -../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/i386/libem/Makefile b/mach/i386/libem/Makefile deleted file mode 100644 index b6a883d78..000000000 --- a/mach/i386/libem/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# $Header$ -MACH=i386 - -all: libem_o.a end.o - -install: all - ../../install libem_o.a tail_em - ../../install end.o end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.o end_em - - -end.o: end.s - $(MACH) -I../../../h -O -c end.s - -libem_o.a: libem_s.a - ASAR=aal ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/end.s diff --git a/mach/i386/libem/compmodule b/mach/i386/libem/compmodule deleted file mode 100755 index 575cf59d9..000000000 --- a/mach/i386/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if i386 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/i386/libem/end.s b/mach/i386/libem/end.s deleted file mode 100644 index b986b7a64..000000000 --- a/mach/i386/libem/end.s +++ /dev/null @@ -1,17 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define endtext,enddata,endbss -.define _end,_etext,_edata - - ! $Header$ - .sect .text -endtext: -_etext: - .align 4 - .sect .data -enddata: -_edata: - .align 4 -.sect .endsect -_end: -endbss: - .align 4 diff --git a/mach/i386/libem/fakfp.s b/mach/i386/libem/fakfp.s deleted file mode 100644 index 0baadb914..000000000 --- a/mach/i386/libem/fakfp.s +++ /dev/null @@ -1,38 +0,0 @@ -.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8 -.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8 -.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8 -.define .cmf4, .cmf8 -.sect .text -.sect .rom -.sect .data -.sect .bss - -! $Header$ - - .sect .text -.adf4: -.adf8: -.sbf4: -.sbf8: -.mlf4: -.mlf8: -.dvf4: -.dvf8: -.ngf4: -.ngf8: -.fif4: -.fif8: -.fef4: -.fef8: -.cif4: -.cif8: -.cuf4: -.cuf8: -.cfi: -.cfu: -.cff4: -.cff8: -.cmf4: -.cmf8: - mov eax,18 ! illegal instruction EILLINS - jmp .trp diff --git a/mach/i386/libem/return.s b/mach/i386/libem/return.s deleted file mode 100644 index f12a88139..000000000 --- a/mach/i386/libem/return.s +++ /dev/null @@ -1,17 +0,0 @@ -.define .sdret, .dsret, .sret, .dret, .cret -.sect .text - -.dsret: - pop edi -.sret: - pop esi -.cret: - mov esp,ebp - pop ebp - ret - -.sdret: - pop esi -.dret: - pop edi - jmp .cret diff --git a/mach/i386/libem/stop.s b/mach/i386/libem/stop.s deleted file mode 100644 index 200d6422d..000000000 --- a/mach/i386/libem/stop.s +++ /dev/null @@ -1,5 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.sect .text -.define .stop -.stop: - jmp __exit diff --git a/mach/i386/libfp/Makefile b/mach/i386/libfp/Makefile deleted file mode 100644 index 1f7e12bc2..000000000 --- a/mach/i386/libfp/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -SUF=o -MAKEFILE=$(EMHOME)/mach/proto/fp/Makefile -MACHDEF="MACH=i386" "CFLAGS=-DUSE_DIVIDE" "SUF=$(SUF)" "ASAR=aal" - -all: - make -f $(MAKEFILE) $(MACHDEF) all - -install: - make -f $(MAKEFILE) $(MACHDEF) install - -cmp: all - -../../compare FP_$(MACH).a tail_fp - -clean: - make -f $(MAKEFILE) $(MACHDEF) clean - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/i386/libsys/Makefile b/mach/i386/libsys/Makefile deleted file mode 100644 index d00169f2d..000000000 --- a/mach/i386/libsys/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# $Header$ -MACH=i386 -all: libmon_o.a head_em.o - -install: all - ../../install libmon_o.a tail_mon - ../../install head_em.o head_em - -cmp: all - -../../compare libmon_o.a tail_mon - -../../compare head_em.o head_em - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -O -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/i386/libsys/_pipe.s b/mach/i386/libsys/_pipe.s deleted file mode 100644 index a51103290..000000000 --- a/mach/i386/libsys/_pipe.s +++ /dev/null @@ -1,12 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __pipe -.sect .text -__pipe: - mov ax,42 - callf 0x7:0x0 - jae 1f - jmp cerror -1: - shl dx,0x10 - or eax,edx - ret diff --git a/mach/i386/libsys/_profil.s b/mach/i386/libsys/_profil.s deleted file mode 100644 index 53ce0879d..000000000 --- a/mach/i386/libsys/_profil.s +++ /dev/null @@ -1,6 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __profil -.sect .text -__profil: - mov ax,44 - jmp syscal diff --git a/mach/i386/libsys/_stime.s b/mach/i386/libsys/_stime.s deleted file mode 100644 index 5b8aa68e7..000000000 --- a/mach/i386/libsys/_stime.s +++ /dev/null @@ -1,6 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __stime -.sect .text -__stime: - mov ax,25 - jmp sysx diff --git a/mach/i386/libsys/_time.s b/mach/i386/libsys/_time.s deleted file mode 100644 index 9e71c45be..000000000 --- a/mach/i386/libsys/_time.s +++ /dev/null @@ -1,6 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __time -.sect .text -__time: - mov ax,13 - jmp syscal diff --git a/mach/i386/libsys/_wait.s b/mach/i386/libsys/_wait.s deleted file mode 100644 index 045f50e6a..000000000 --- a/mach/i386/libsys/_wait.s +++ /dev/null @@ -1,12 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __wait -.sect .text -__wait: - mov ax,7 - callf 0x7:0x0 - jb 1f - shl dx,0x10 - or eax,edx - ret -1: - jmp cerror diff --git a/mach/i386/libsys/compmodule b/mach/i386/libsys/compmodule deleted file mode 100755 index db47c6103..000000000 --- a/mach/i386/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if i386 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/i386/ncg/Makefile b/mach/i386/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/i386/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/i80/as/Makefile b/mach/i80/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/i80/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/i80/dl/Makefile b/mach/i80/dl/Makefile deleted file mode 100644 index e684c21e2..000000000 --- a/mach/i80/dl/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME=../../.. -OBJLIB=$(EMHOME)/modules/lib/libobject.a - -head: mccpm nascom - -mccpm: mccpm.c - $(CC) -I$(EMHOME)/h -o mccpm mccpm.c $(OBJLIB) - -nascom: nascom.c - $(CC) -I$(EMHOME)/h -o nascom nascom.c $(OBJLIB) - -install: head - @echo Nothing is installed - -cmp: head - @echo Nothing is compared - -clean: - rm -f *.o - -pr: - @pr `pwd`/Makefile `pwd`/mccpm.c `pwd`/nascom.c - -opr: - make pr | opr diff --git a/mach/i80/libem/Makefile b/mach/i80/libem/Makefile deleted file mode 100644 index e4ec304d6..000000000 --- a/mach/i80/libem/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=i80 -all: libem_o.a end.o - -install: all - ../../install end.o end_em - ../../install libem_o.a tail_em - - -cmp: all - -../../compare end.o end_em - -../../compare libem_o.a tail_em - -libem_o.a: libem_s.a - ASAR=aal ; export ASAR ;\ - march . libem_o.a - -end.o: end.s - $(MACH) -I../../../h -c end.s - -clean: - rm -f *.o libem_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/end.s - @arch pv libem_s.a | pr -h `pwd`/libem_s.a diff --git a/mach/i80/libem/compmodule b/mach/i80/libem/compmodule deleted file mode 100755 index 2e87032ca..000000000 --- a/mach/i80/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if i80 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/i80/libem/end.s b/mach/i80/libem/end.s deleted file mode 100644 index 6b9ce418e..000000000 --- a/mach/i80/libem/end.s +++ /dev/null @@ -1,17 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define endtext,enddata,endbss -.define _end,_etext,_edata - - ! $Header$ - .sect .text -endtext: -_etext: - .align 2 - .sect .data -enddata: -_edata: - .align 2 -.sect .endsect -_end: -endbss: - .align 2 diff --git a/mach/i80/libmon/Makefile b/mach/i80/libmon/Makefile deleted file mode 100644 index c334b9ba6..000000000 --- a/mach/i80/libmon/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=i80 -all: libsys_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libsys_o.a tail_sys - - -cmp: all - -../../compare head_em.o head_em - -../../compare libsys_o.a tail_sys - -libsys_o.a: libsys_s.a - ASAR=aal ; export ASAR ;\ - march . libsys_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libsys_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libsys_s.a | pr -h `pwd`/libsys_s.a diff --git a/mach/i80/libmon/compmodule b/mach/i80/libmon/compmodule deleted file mode 100755 index de15217c3..000000000 --- a/mach/i80/libmon/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if i80 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/i80/libmon/head.s b/mach/i80/libmon/head.s deleted file mode 100644 index f5bd23517..000000000 --- a/mach/i80/libmon/head.s +++ /dev/null @@ -1,49 +0,0 @@ -.define hol0, argv, envp, begbss -.define .ignmask,.reghp,.trapproc,.fra -.define .retadr,.retadr1,.areg,.bcreg,.tmp1 -.define block1, block2, block3 -.define .stop - - .base 0x1000 -.text - lxi h,0x1000 ! stack will grow from 0x1000 downwards - sphl - lxi h,begbss ! clear bss - lxi d,endbss-begbss - mvi c,0 - -2: mov m,c - inx h - dcx d - mov a,e - ora d - jnz 2b - - lxi h,envp ! call main - push h - lxi h,argv - push h - lxi h,0 - push h - call _m_a_i_n -.stop: jmp 0xfb52 - -.bss -begbss: -.trapproc: .space 2 -.ignmask: .space 2 -.data -hol0: .space 8 -.reghp: .word endbss -argv: .word 0 -envp: .word 0 -.retadr: .space 2 ! used to save return address -.retadr1: .space 2 ! reserve -.bcreg: .space 2 ! used to save localbase -.areg: .space 1 -.tmp1: .space 2 -.fra: .space 8 ! 8 bytes function return area -block1: .space 4 ! used by 32 bits divide and -block2: .space 4 ! multiply routines -block3: .space 4 - diff --git a/mach/i80/libmon/tail.s b/mach/i80/libmon/tail.s deleted file mode 100644 index bd667480e..000000000 --- a/mach/i80/libmon/tail.s +++ /dev/null @@ -1,7 +0,0 @@ -.define endtext, enddata, endbss -.text -endtext: .align 2 -.data -enddata: .align 2 -.bss -endbss: .align 2 diff --git a/mach/i80/ncg/Makefile b/mach/i80/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/i80/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/i86/as/Makefile b/mach/i86/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/i86/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/i86/as/READ_ME b/mach/i86/as/READ_ME deleted file mode 100644 index b620073b9..000000000 --- a/mach/i86/as/READ_ME +++ /dev/null @@ -1,9 +0,0 @@ -The mach?.c files in this directory were made for an earlier version of -the universal assembler and are too dependent on its innards. -I have no idea in what way they should be changed. - - Duk Bekema - -I adapted them to the new framework. It appears to work now. - - Ceriel Jacobs diff --git a/mach/i86/ce/Makefile b/mach/i86/ce/Makefile deleted file mode 100644 index b08bc0fda..000000000 --- a/mach/i86/ce/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -EMHOME = ../../.. -CEG = $(EMHOME)/lib/ceg/util -OBJ = obj - -all: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) - -install: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) install - -cmp: - -make -f $(CEG)/make_asobj "OBJ="$(OBJ) cmp - -pr: - @pr Makefile EM_table mach.h mach.c as_table as.h as.c - -opr: - make pr | opr - -# total cleanup -clean: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) clean - -# only remove ce, ceg, and back directories -dclean: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) dclean diff --git a/mach/i86/cv/Makefile b/mach/i86/cv/Makefile deleted file mode 100644 index 5cfa97a6a..000000000 --- a/mach/i86/cv/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - ../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/i86/libem/Makefile b/mach/i86/libem/Makefile deleted file mode 100644 index 1924bb795..000000000 --- a/mach/i86/libem/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# $Header$ -MACH=i86 - -all: libem_o.a end.o - -install: all - ../../install libem_o.a tail_em - ../../install end.o end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.o end_em - - -end.o: end.s - $(MACH) -I../../../h -O -c end.s - -libem_o.a: libem_s.a - ASAR=aal ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/end.s diff --git a/mach/i86/libem/compmodule b/mach/i86/libem/compmodule deleted file mode 100755 index 8ec2f6722..000000000 --- a/mach/i86/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if i86 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/i86/libem/end.s b/mach/i86/libem/end.s deleted file mode 100644 index 6b9ce418e..000000000 --- a/mach/i86/libem/end.s +++ /dev/null @@ -1,17 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define endtext,enddata,endbss -.define _end,_etext,_edata - - ! $Header$ - .sect .text -endtext: -_etext: - .align 2 - .sect .data -enddata: -_edata: - .align 2 -.sect .endsect -_end: -endbss: - .align 2 diff --git a/mach/i86/libem/fakfp.s b/mach/i86/libem/fakfp.s deleted file mode 100644 index bffaea36c..000000000 --- a/mach/i86/libem/fakfp.s +++ /dev/null @@ -1,38 +0,0 @@ -.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8 -.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8 -.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8 -.define .cmf4, .cmf8 -.sect .text -.sect .rom -.sect .data -.sect .bss - -! $Header$ - - .sect .text -.adf4: -.adf8: -.sbf4: -.sbf8: -.mlf4: -.mlf8: -.dvf4: -.dvf8: -.ngf4: -.ngf8: -.fif4: -.fif8: -.fef4: -.fef8: -.cif4: -.cif8: -.cuf4: -.cuf8: -.cfi: -.cfu: -.cff4: -.cff8: -.cmf4: -.cmf8: - mov ax,18 ! illegal instruction EILLINS - jmp .trp diff --git a/mach/i86/libem/printf.s b/mach/i86/libem/printf.s deleted file mode 100644 index 83f133202..000000000 --- a/mach/i86/libem/printf.s +++ /dev/null @@ -1,40 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.sect .text -.define printf -.extern printc, printd, prints - -printf: - pop bx ! return address - xchg ax,di - mov si,sp -1: - movb al,(di) - inc di - testb al,al - jz 6f - cmpb al,'%' - je 3f -2: - call printc - jmp 1b -3: - movb al,(di) - inc di - cmpb al,'c' - jne 4f - lods - jmp 2b -4: - cmpb al,'d' - jne 5f - lods - call printd - jmp 1b -5: - cmpb al,'s' - jne 2b - lods - call prints - jmp 1b -6: - jmp bx diff --git a/mach/i86/libem/stop.s b/mach/i86/libem/stop.s deleted file mode 100644 index fbf0e691e..000000000 --- a/mach/i86/libem/stop.s +++ /dev/null @@ -1,5 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.sect .text -.define .stop -.stop: - int 3 diff --git a/mach/i86/libem/tail.s b/mach/i86/libem/tail.s deleted file mode 100644 index 059b23769..000000000 --- a/mach/i86/libem/tail.s +++ /dev/null @@ -1,16 +0,0 @@ -.define endtext,enddata,endbss -.define _end,_etext,_edata - - ! $Header$ - .text -endtext: -_etext: - .align 2 - .data -enddata: -_edata: - .align 2 - .bss -_end: -endbss: - .align 2 diff --git a/mach/i86/libfp/Makefile b/mach/i86/libfp/Makefile deleted file mode 100644 index 67c3ad2dc..000000000 --- a/mach/i86/libfp/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -SUF=o -MAKEFILE=$(EMHOME)/mach/proto/fp/Makefile -MACHDEF="MACH=i86" "SUF=$(SUF)" "ASAR=aal" - -all: - make -f $(MAKEFILE) $(MACHDEF) all - -install: - make -f $(MAKEFILE) $(MACHDEF) install - -cmp: all - -../../compare FP_$(MACH).a tail_fp - -clean: - make -f $(MAKEFILE) $(MACHDEF) clean - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/i86/libsys/Makefile b/mach/i86/libsys/Makefile deleted file mode 100644 index c03a0394d..000000000 --- a/mach/i86/libsys/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# $Header$ -MACH=i86 -all: libmon_o.a head_em.o - -install: all - ../../install libmon_o.a tail_mon - ../../install head_em.o head_em - -cmp: all - -../../compare libmon_o.a tail_mon - -../../compare head_em.o head_em - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -O -c head_em.s -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/i86/libsys/compmodule b/mach/i86/libsys/compmodule deleted file mode 100755 index 702339021..000000000 --- a/mach/i86/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if i86 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/i86/ncg/Makefile b/mach/i86/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/i86/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/install b/mach/install deleted file mode 100755 index 8d87ed147..000000000 --- a/mach/install +++ /dev/null @@ -1,21 +0,0 @@ -case $# in -1) DEST="$1" ;; -2) DEST="$2" ;; -*) echo $0 [source] destination ;; -esac -MACH=`(cd .. ; basename \`pwd\`)` -mkdir ../../../lib/$MACH >/dev/null 2>&1 -if cp "$1" ../../../lib/${MACH}/$DEST >/dev/null 2>&1 || - { rm -f ../../../lib/${MACH}/$DEST >/dev/null 2>&1 && - cp "$1" ../../../lib/${MACH}/$DEST >/dev/null 2>&1 - } -then - if (ar t ../../../lib/${MACH}/$DEST | grep __.SYMDEF ) >/dev/null 2>&1 - then - ranlib ../../../lib/${MACH}/$DEST - fi - exit 0 -else - echo Sorry, can not create "lib/${MACH}/$DEST". - exit 1 -fi diff --git a/mach/m68020/as/Makefile b/mach/m68020/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/m68020/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/m68020/ce/Makefile b/mach/m68020/ce/Makefile deleted file mode 100644 index b08bc0fda..000000000 --- a/mach/m68020/ce/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -EMHOME = ../../.. -CEG = $(EMHOME)/lib/ceg/util -OBJ = obj - -all: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) - -install: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) install - -cmp: - -make -f $(CEG)/make_asobj "OBJ="$(OBJ) cmp - -pr: - @pr Makefile EM_table mach.h mach.c as_table as.h as.c - -opr: - make pr | opr - -# total cleanup -clean: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) clean - -# only remove ce, ceg, and back directories -dclean: - make -f $(CEG)/make_asobj "OBJ="$(OBJ) dclean diff --git a/mach/m68020/cv/Makefile b/mach/m68020/cv/Makefile deleted file mode 100644 index 292eacbb9..000000000 --- a/mach/m68020/cv/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -CFLAGS=-O -I../../../h -LDFLAGS = - -cv: cv.o - $(CC) -o cv $(LDFLAGS) cv.o - -install: ins_cv -ins_cv: cv - ../../install cv - -cmp: cmp_cv -cmp_cv: cv - -../../compare cv - -opr: - make pr | opr - -pr: - @pr `pwd`/cv.c - -clean: - -rm -f *.o *.old cv diff --git a/mach/m68020/libem/Makefile b/mach/m68020/libem/Makefile deleted file mode 100644 index 1233a1f00..000000000 --- a/mach/m68020/libem/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# $Header$ -MACH=m68020 -ASAR=aal -all: libem_o.a end.a - -install: all - ../../install libem_o.a tail_em - ../../install end.a end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.a end_em - -end.a: em_end.s etext.s edata.s end.s - $(MACH) -I../../../h -c em_end.s - $(MACH) -I../../../h -c edata.s - $(MACH) -I../../../h -c etext.s - $(MACH) -I../../../h -c end.s - $(ASAR) cr end.a em_end.o etext.o edata.o end.o - -libem_o.a: libem_s.a - ASAR=$(ASAR) ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a end.a - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/em_end.s `pwd`/edata.s `pwd`/etext.s `pwd`/end.s - -trpstr.s: trpstr.c strscript - sh strscript - -distr: trpstr.s diff --git a/mach/m68020/libem/compmodule b/mach/m68020/libem/compmodule deleted file mode 100755 index a61e867bb..000000000 --- a/mach/m68020/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if m68020 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/m68020/libem/edata.s b/mach/m68020/libem/edata.s deleted file mode 100644 index f53adc109..000000000 --- a/mach/m68020/libem/edata.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _edata -.sect .data - .align 4 - .sect .data -_edata: diff --git a/mach/m68020/libem/em_end.s b/mach/m68020/libem/em_end.s deleted file mode 100644 index a062368da..000000000 --- a/mach/m68020/libem/em_end.s +++ /dev/null @@ -1,22 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define endtext,enddata,endbss,__end -.sect .text - .align 4 -.sect .rom - .align 4 -.sect .data - .align 4 -.sect .bss - .align 4 -.sect .end ! only for declaration of _end, __end and endbss. - - .sect .text -endtext: - .sect .data -enddata: - .sect .end -__end: -endbss: diff --git a/mach/m68020/libem/end.s b/mach/m68020/libem/end.s deleted file mode 100644 index 93a1e6e00..000000000 --- a/mach/m68020/libem/end.s +++ /dev/null @@ -1,7 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _end -.sect .end ! only for declaration of _end, __end and endbss. -_end: diff --git a/mach/m68020/libem/etext.s b/mach/m68020/libem/etext.s deleted file mode 100644 index 8c7453cb4..000000000 --- a/mach/m68020/libem/etext.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _etext -.sect .text - .align 4 - .sect .text -_etext: diff --git a/mach/m68020/libem/fakfp.s b/mach/m68020/libem/fakfp.s deleted file mode 100644 index f6e6d2403..000000000 --- a/mach/m68020/libem/fakfp.s +++ /dev/null @@ -1,39 +0,0 @@ -.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8 -.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8 -.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8 -.define .cmf4, .cmf8 -.sect .text -.sect .rom -.sect .data -.sect .bss - -! $Header$ - - .sect .text -.adf4: -.adf8: -.sbf4: -.sbf8: -.mlf4: -.mlf8: -.dvf4: -.dvf8: -.ngf4: -.ngf8: -.fif4: -.fif8: -.fef4: -.fef8: -.cif4: -.cif8: -.cuf4: -.cuf8: -.cfi: -.cfu: -.cff4: -.cff8: -.cmf4: -.cmf8: - move.l #18,-(sp) - jsr (.trp) - rts diff --git a/mach/m68020/libem/printf.s b/mach/m68020/libem/printf.s deleted file mode 100644 index 0ec7553c2..000000000 --- a/mach/m68020/libem/printf.s +++ /dev/null @@ -1,83 +0,0 @@ -.define _printf, _putchar, _getal, _char -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .bss -_getal: - .space 12 -_char: - .space 1 - .align 4 -.sect .data -hexs: - .ascii "0123456789abcdef" - .align 4 -.sect .text -_printf: - movem.l d0/d1/d2/a0/a1/a2/a3/a4/a5/a6, -(sp) - lea (44, sp), a6 ! a6 <- address of arguments - move.l (a6)+, a5 ! a5 <- address of format -next: move.b (a5)+, d0 - beq out - cmp.b #'%', d0 - beq procnt -put: move.l d0, -(sp) - jsr (_putchar) ! long argument on stack - tst.l (sp)+ - bra next - -procnt: move.b (a5)+, d0 - cmp.b #'d', d0 ! NOTE: %d means unsigned. - beq digit - cmp.b #'x', d0 - beq hex - cmp.b #'s', d0 - beq string - cmp.b #'%', d0 ! second % has to be printed. - beq put - tst.b -(a5) ! normal char should be printed - bra next - -string: move.l (a6)+, a2 ! a2 <- address of string -sloop: move.b (a2)+, d0 - beq next - move.l d0, -(sp) - jsr (_putchar) ! long argument on stack - tst.l (sp)+ - bra sloop - -digit: move.l (a6)+, d1 ! d1 <- integer - move.l #_getal+12, a2 ! a2 <- ptr to last part of buf - clr.b -(a2) ! stringterminator -1: divul.l #10, d2:d1 ! d1 <- qotient; d2 <- remainder - add.l #'0', d2 - move.b d2, -(a2) - tst.l d1 ! if quotient = 0 then ready - bne 1b - bra sloop ! print digitstring. - -hex: move.l (a6)+, d1 ! d1 <- integer - move.l #_getal+12, a2 ! a2 <- ptr to last part of buf - clr.b -(a2) ! stringterminator - move.l #7, d2 ! loop control -1: move.l d1, d0 - and.l #15, d0 - move.b (hexs,d0.w), -(a2) ! hex digit - asr.l #4, d1 - dbf d2, 1b - bra sloop - -out: - movem.l (sp)+, d0/d1/d2/a0/a1/a2/a3/a4/a5/a6 - rts - - -_putchar: - move.l #1, -(sp) - pea (11,sp) - move.l #1, -(sp) - jsr (_write) - lea (12, sp), sp - rts -.align 2 diff --git a/mach/m68020/libem/strscript b/mach/m68020/libem/strscript deleted file mode 100644 index ee4cc1b41..000000000 --- a/mach/m68020/libem/strscript +++ /dev/null @@ -1,3 +0,0 @@ -m68020 -c.s -L -LIB -I../../../h trpstr.c -sed s/_trpstr/.trpstr/g < trpstr.s > trpstr.ss -mv trpstr.ss trpstr.s diff --git a/mach/m68020/libfp/Makefile b/mach/m68020/libfp/Makefile deleted file mode 100644 index 22e6c7956..000000000 --- a/mach/m68020/libfp/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -SUF=o -MAKEFILE=$(EMHOME)/mach/proto/fp/Makefile -MACHDEF="MACH=m68020" "CFLAGS=-DUSE_DIVIDE" "SUF=$(SUF)" "ASAR=aal" - -all: - make -f $(MAKEFILE) $(MACHDEF) all - -install: - make -f $(MAKEFILE) $(MACHDEF) install - -cmp: all - -../../compare FP_$(MACH).a tail_fp - -clean: - make -f $(MAKEFILE) $(MACHDEF) clean - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/m68020/libsys/Makefile b/mach/m68020/libsys/Makefile deleted file mode 100644 index 5861ef1dd..000000000 --- a/mach/m68020/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=m68020 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/m68020/libsys/compmodule b/mach/m68020/libsys/compmodule deleted file mode 100755 index 58dc66c61..000000000 --- a/mach/m68020/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if m68020 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/m68020/ncg/Makefile b/mach/m68020/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/m68020/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/m68020/top/Makefile b/mach/m68020/top/Makefile deleted file mode 100644 index 57908427f..000000000 --- a/mach/m68020/top/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -EMHOME=../../.. -LIBS=$(EMHOME)/modules/lib/libstring.a -PREFLAGS=-I. -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -DNDEBUG -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -CDIR=$(EMHOME)/mach/proto/top -CFILES=$(CDIR)/top.c $(CDIR)/queue.c -OFILES=top.o queue.o - -all: gen.c - make top - -top: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LIBS) -o top - -top.o: $(CDIR)/top.c gen.c - $(CC) -c $(CFLAGS) $(CDIR)/top.c - -queue.o: $(CDIR)/queue.c - $(CC) -c $(CFLAGS) $(CDIR)/queue.c - -install: all - $(EMHOME)/mach/install top - -cmp: all - -$(EMHOME)/mach/compare top - -gen.c: table - $(EMHOME)/lib/topgen table - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) - -clean: - rm -f *.o gen.c gen.h top - -top.o: gen.h -top.o: $(CDIR)/top.h -top.o: $(CDIR)/queue.h -queue.o: $(CDIR)/queue.h diff --git a/mach/m68k2/as/Makefile b/mach/m68k2/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/m68k2/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/m68k2/cg/fppsim.h b/mach/m68k2/cg/fppsim.h deleted file mode 100644 index a7d621e27..000000000 --- a/mach/m68k2/cg/fppsim.h +++ /dev/null @@ -1,6 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* #define NOFLOAT /* define when not using fpp simulator */ diff --git a/mach/m68k2/cv/Makefile b/mach/m68k2/cv/Makefile deleted file mode 100644 index d0a002881..000000000 --- a/mach/m68k2/cv/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -CFLAGS=-I../../../h -O -LDFLAGS = - -cv: cv.o - $(CC) -o cv $(LDFLAGS) cv.o - -install: ins_cv -ins_cv: cv - ../../install cv - -cmp: cmp_cv -cmp_cv: cv - -../../compare cv - -opr: - make pr | opr - -pr: - @pr `pwd`/cv.c - -clean: - -rm -f *.o *.old cv diff --git a/mach/m68k2/dl/Makefile b/mach/m68k2/dl/Makefile deleted file mode 100644 index e52176105..000000000 --- a/mach/m68k2/dl/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -OBJLIB=$(EMHOME)/modules/lib/libobject.a - -head: dl - -dl: dl.c - $(CC) -I$(EMHOME)/h -o dl dl.c $(OBJLIB) - -install: head - @echo Nothing is installed - -cmp: head - @echo Nothing is compared - -clean: - rm -f *.o - -pr: - @pr `pwd`/Makefile `pwd`/dl.c - -opr: - make pr | opr diff --git a/mach/m68k2/libem/Makefile b/mach/m68k2/libem/Makefile deleted file mode 100644 index b8a2346a2..000000000 --- a/mach/m68k2/libem/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# $Header$ -MACH=m68k2 -ASAR=aal -all: libem_o.a end.a - -install: all - ../../install libem_o.a tail_em - ../../install end.a end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.a end_em - -end.a: em_end.s etext.s edata.s end.s - $(MACH) -I../../../h -c em_end.s - $(MACH) -I../../../h -c edata.s - $(MACH) -I../../../h -c etext.s - $(MACH) -I../../../h -c end.s - $(ASAR) cr end.a em_end.o etext.o edata.o end.o - -libem_o.a: libem_s.a - ASAR=$(ASAR) ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a end.a - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/em_end.s `pwd`/edata.s `pwd`/etext.s `pwd`/end.s diff --git a/mach/m68k2/libem/compmodule b/mach/m68k2/libem/compmodule deleted file mode 100755 index 02105f215..000000000 --- a/mach/m68k2/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if m68k2 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/m68k2/libem/cvf.s b/mach/m68k2/libem/cvf.s deleted file mode 100644 index dc2c5d2e4..000000000 --- a/mach/m68k2/libem/cvf.s +++ /dev/null @@ -1,19 +0,0 @@ -.define .cfi,.cif,.cfu,.cuf,.cff -.sect .text -.sect .rom -.sect .data -.sect .bss - - .sect .text - - ! this is a dummy float conversion routine -.cfi: -.cif: -.cfu: -.cuf: -.cff: - move.l (sp)+,a0 ! return address - move (sp)+,d0 ! destination size - sub (sp)+,d0 ! diff. in sizes - sub d0,sp - jmp (a0) diff --git a/mach/m68k2/libem/edata.s b/mach/m68k2/libem/edata.s deleted file mode 100644 index f53adc109..000000000 --- a/mach/m68k2/libem/edata.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _edata -.sect .data - .align 4 - .sect .data -_edata: diff --git a/mach/m68k2/libem/em_end.s b/mach/m68k2/libem/em_end.s deleted file mode 100644 index a062368da..000000000 --- a/mach/m68k2/libem/em_end.s +++ /dev/null @@ -1,22 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define endtext,enddata,endbss,__end -.sect .text - .align 4 -.sect .rom - .align 4 -.sect .data - .align 4 -.sect .bss - .align 4 -.sect .end ! only for declaration of _end, __end and endbss. - - .sect .text -endtext: - .sect .data -enddata: - .sect .end -__end: -endbss: diff --git a/mach/m68k2/libem/end.s b/mach/m68k2/libem/end.s deleted file mode 100644 index 93a1e6e00..000000000 --- a/mach/m68k2/libem/end.s +++ /dev/null @@ -1,7 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _end -.sect .end ! only for declaration of _end, __end and endbss. -_end: diff --git a/mach/m68k2/libem/etext.s b/mach/m68k2/libem/etext.s deleted file mode 100644 index 8c7453cb4..000000000 --- a/mach/m68k2/libem/etext.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _etext -.sect .text - .align 4 - .sect .text -_etext: diff --git a/mach/m68k2/libem/ffp.s b/mach/m68k2/libem/ffp.s deleted file mode 100644 index ab99094cd..000000000 --- a/mach/m68k2/libem/ffp.s +++ /dev/null @@ -1,39 +0,0 @@ -.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8 -.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8 -.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8 -.define .cmf4, .cmf8 -.sect .text -.sect .rom -.sect .data -.sect .bss - -! $Header$ - - .sect .text -.adf4: -.adf8: -.sbf4: -.sbf8: -.mlf4: -.mlf8: -.dvf4: -.dvf8: -.ngf4: -.ngf8: -.fif4: -.fif8: -.fef4: -.fef8: -.cif4: -.cif8: -.cuf4: -.cuf8: -.cfi: -.cfu: -.cff4: -.cff8: -.cmf4: -.cmf8: - move.w #18,-(sp) - jsr .trp - rts diff --git a/mach/m68k2/libem/printf.s b/mach/m68k2/libem/printf.s deleted file mode 100644 index 044484df5..000000000 --- a/mach/m68k2/libem/printf.s +++ /dev/null @@ -1,189 +0,0 @@ -.define _printn -.define _printf -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text -_putchar: - move.w #1,-(sp) - pea 7(sp) - move.w #1,-(sp) - jsr _write - add.l #8,sp - rts -_printf: - link a6,#-12 -.sect .data -_12: - .data2 28786 - .data2 26990 - .data2 29798 - .data2 11875 - .data2 0 -.sect .text - pea 8+4(a6) - move.l (sp)+,-6(a6) -I004: - move.l 8+0(a6),-(sp) - move.l (sp),-(sp) - move.l (sp)+,a0 - add #1,a0 - move.l a0,-(sp) - move.l (sp)+,8+0(a6) - move.l (sp)+,a0 - clr d0 - move.b (a0),d0 - move.w d0,-(sp) - move.w (sp),-(sp) - move.w (sp)+,-2(a6) - move.w #37,-(sp) - move.w (sp)+,d0 - cmp (sp)+,d0 - beq I005 - move.w -2(a6),-(sp) - tst (sp)+ - beq I002 - move.w -2(a6),-(sp) - jsr _putchar - add #2,sp - jmp I004 -I005: - move.l 8+0(a6),-(sp) - move.l (sp),-(sp) - move.l (sp)+,a0 - add #1,a0 - move.l a0,-(sp) - move.l (sp)+,8+0(a6) - move.l (sp)+,a0 - clr d0 - move.b (a0),d0 - move.w d0,-(sp) - move.w (sp)+,-2(a6) - move.w -2(a6),-(sp) - move.w #100,-(sp) - move.w (sp)+,d0 - cmp (sp)+,d0 - beq I008 - move.w -2(a6),-(sp) - move.w #117,-(sp) - move.w (sp)+,d0 - cmp (sp)+,d0 - bne I007 -I008: - move.l -6(a6),-(sp) - move.l (sp)+,a0 - add #2,a0 - move.l a0,-(sp) - move.l (sp),-(sp) - move.l (sp)+,-6(a6) - move.l (sp)+,a0 - move.w -2(a0),-(sp) - move.w (sp)+,-8(a6) - move.w -2(a6),-(sp) - move.w #100,-(sp) - move.w (sp)+,d0 - cmp (sp)+,d0 - bne I009 - move.w -8(a6),-(sp) - tst (sp)+ - bge I009 - move.w #0,-(sp) - move.w -8(a6),-(sp) - move.w (sp)+,d0 - move.w (sp)+,d1 - sub d0,d1 - move.w d1,-(sp) - move.w (sp)+,-8(a6) - move.w #45,-(sp) - jsr _putchar - add #2,sp -I009: - move.w -8(a6),-(sp) - jsr _printn - add #2,sp - jmp I004 -I007: - move.w -2(a6),-(sp) - move.w #115,-(sp) - move.w (sp)+,d0 - cmp (sp)+,d0 - bne I004 - move.l -6(a6),-(sp) - move.l (sp)+,a0 - add #4,a0 - move.l a0,-(sp) - move.l (sp),-(sp) - move.l (sp)+,-6(a6) - move.l (sp)+,a0 - move.l -4(a0),-(sp) - move.l (sp)+,-12(a6) -I00c: - move.l -12(a6),-(sp) - move.l (sp),-(sp) - move.l (sp)+,a0 - add #1,a0 - move.l a0,-(sp) - move.l (sp)+,-12(a6) - move.l (sp)+,a0 - clr d0 - move.b (a0),d0 - move.w d0,-(sp) - move.w (sp),-(sp) - move.w (sp)+,-2(a6) - tst (sp)+ - beq I004 - move.w -2(a6),-(sp) - jsr _putchar - add #2,sp - jmp I00c -I002: - unlk a6 - rts -_printn: - link a6,#-2 -.sect .data -_15: - .data2 12337 - .data2 12851 - .data2 13365 - .data2 13879 - .data2 14393 - .data2 0 -.sect .text - move.w 8+0(a6),-(sp) - move.w #10,-(sp) - move.w (sp)+,d0 - clr.l d1 - move.w (sp)+,d1 - divu d0,d1 - move.w d1,-(sp) - move.w (sp),-(sp) - move.w (sp)+,-2(a6) - tst (sp)+ - beq I013 - move.w -2(a6),-(sp) - jsr _printn - add #2,sp -I013: - pea _15 - move.w 8+0(a6),-(sp) - move.w #10,-(sp) - move.w (sp)+,d0 - clr.l d1 - move.w (sp)+,d1 - divu d0,d1 - swap d1 - move.w d1,-(sp) - move.w (sp)+,d0 - ext.l d0 - add.l (sp)+,d0 - move.l d0,-(sp) - move.l (sp)+,a0 - clr d0 - move.b (a0),d0 - move.w d0,-(sp) - jsr _putchar - add #2,sp - unlk a6 - rts diff --git a/mach/m68k2/libfp/Makefile b/mach/m68k2/libfp/Makefile deleted file mode 100644 index 37ab1e986..000000000 --- a/mach/m68k2/libfp/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -SUF=o -MAKEFILE=$(EMHOME)/mach/proto/fp/Makefile -MACHDEF="MACH=m68k2" "SUF=$(SUF)" "ASAR=aal" - -all: - make -f $(MAKEFILE) $(MACHDEF) all - -install: - make -f $(MAKEFILE) $(MACHDEF) install - -cmp: all - -../../compare FP_$(MACH).a tail_fp - -clean: - make -f $(MAKEFILE) $(MACHDEF) clean - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/m68k2/libsys/Makefile b/mach/m68k2/libsys/Makefile deleted file mode 100644 index 1caeccd0e..000000000 --- a/mach/m68k2/libsys/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# $Header$ -MACH=m68k2 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -c -I../../../h head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/m68k2/libsys/compmodule b/mach/m68k2/libsys/compmodule deleted file mode 100755 index bfdaef6dc..000000000 --- a/mach/m68k2/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if m68k2 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/m68k2/ncg/Makefile b/mach/m68k2/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/m68k2/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/m68k2/ncg/README b/mach/m68k2/ncg/README deleted file mode 100644 index 1849c66e5..000000000 --- a/mach/m68k2/ncg/README +++ /dev/null @@ -1,11 +0,0 @@ -The file 'table' in this directory contains a back end table for the -MC68020 processor as well as one for the MC68000. Both tables use 2 or 4 bytes -for words and 4 bytes for pointers. The table must be preprocessed first -by the C preprocessor. -The file "whichone.h" specifies which code generator is generated: -it #defines either TBL68000 or TBL86020, and it defines WORD_SIZE to either -2 or 4. -The m68k4(TBL68000) cg can very well be used for the MC68010 processor, -for it makes rather efficient use of the 68010 loop mode. - -The mach.[ch] files are also suitable for both the m68020 and the m68k[24]. diff --git a/mach/m68k2/ncg/instrmacs.h b/mach/m68k2/ncg/instrmacs.h deleted file mode 100644 index b3d2b1649..000000000 --- a/mach/m68k2/ncg/instrmacs.h +++ /dev/null @@ -1,144 +0,0 @@ -#if WORD_SIZE==2 -#define LLP ldl -#define LEP lde -#define LFP ldf /* load offsetted pointer */ -#define SLP sdl -#define SEP sde -#define SFP sdf /* store offsetted pointer */ - -#define ABS_off_int ABS_off2 -#define ABS_indoff_int ABS_indoff2 -#define ABSIND_off_int ABSIND_off2 -#define INDOFF_off_int INDOFF_off2 -#define OFF_off_int OFF_off2 -#define OFF_indoff_int OFF_indoff2 -#define abs_index_int abs_index2 -#define absolute_int absolute2 -#define any_int any2 -#define conreg_int conreg2 -#define data_int data2 -#define datalt_int datalt2 -#define dreg_int dreg2 -#define imm_cmp_int imm_cmp2 -#define immediate_int immediate2 -#define indirect_int indirect2 -#define index_off_int index_off2 -#define offsetted_int offsetted2 -#define post_inc_int post_inc2 -#define pre_dec_int pre_dec2 -#define store_int any2 -#define test_set_int test_set2 - -#define add_i add_w -#define ADD_I "add.w" -#define and_i and_w -#define AND_I "and.w" -#define asl_i asl_w -#define ASL_I "asl.w" -#define asr_i asr_w -#define ASR_I "asr.w" -#define clr_i clr_w -#define CLR_I "clr.w" -#define cmp_i cmp_w -#define cmp2_i cmp2_w -#define DEC "sub.w #1," -#define DIVS_I "divs.w" -#define DIVU_I "divu.w" -#define eor_i eor_w -#define EOR_I "eor.w" -#define INC "add.w #1," -#define lsr_i lsr_w -#define LSR_I "lsr.w" -#define move_i move_w -#define MOVE_I "move.w" -#define muls_i muls_w -#define MULS_I "muls.w" -#define mulu_i mulu_w -#define MULU_I "mulu.w" -#define neg_i neg_w -#define NEG_I "neg.w" -#define not_i not_w -#define NOT_I "not.w" -#define or_i or_w -#define OR_I "or.w" -#define rol_i rol_w -#define ROL_I "rol.w" -#define ror_i ror_w -#define ROR_I "ror.w" -#define sub_i sub_w -#define SUB_I "sub.w" -#define tst_i tst_w - -#else - -#define LLP lol -#define LEP loe -#define LFP lof /* load offsetted pointer */ -#define SLP stl -#define SEP ste -#define SFP stf /* store offsetted pointer */ - -#define ABS_off_int ABS_off4 -#define ABS_indoff_int ABS_indoff4 -#define ABSIND_off_int ABSIND_off4 -#define INDOFF_off_int INDOFF_off4 -#define OFF_off_int OFF_off4 -#define OFF_indoff_int OFF_indoff4 -#define abs_index_int abs_index4 -#define absolute_int absolute4 -#define any_int any4 -#define conreg_int conreg4 -#define data_int data4 -#define datalt_int datalt4 -#define dreg_int dreg4 -#define imm_cmp_int imm_cmp4 -#define immediate_int immediate4 -#define indirect_int indirect4 -#define index_off_int index_off4 -#define offsetted_int offsetted4 -#define post_inc_int post_inc4 -#define pre_dec_int pre_dec4 -#define store_int store4 -#define test_set_int test_set4 - -#define add_i add_l -#define ADD_I "add.l" -#define and_i and_l -#define AND_I "and.l" -#define asl_i asl_l -#define ASL_I "asl.l" -#define asr_i asr_l -#define ASR_I "asr.l" -#define clr_i clr_l -#define CLR_I "clr.l" -#define cmp_i cmp_l -#define cmp2_i cmp2_l -#define DEC "sub.l #1," -#define DIVS_I "divs.l" -#define DIVU_I "divu.l" -#define eor_i eor_l -#define EOR_I "eor.l" -#define INC "add.l #1," -#define lsr_i lsr_l -#define LSR_I "lsr.l" -#define move_i move_l -#define MOVE_I "move.l" -#define muls_i muls_l -#define MULS_I "muls.l" -#define mulu_i mulu_l -#define MULU_I "mulu.l" -#define neg_i neg_l -#define NEG_I "neg.l" -#define not_i not_l -#define NOT_I "not.l" -#define or_i or_l -#define OR_I "or.l" -#define rol_i rol_l -#define ROL_I "rol.l" -#define ror_i ror_l -#define ROR_I "ror.l" -#define sub_i sub_l -#define SUB_I "sub.l" -#define tst_i tst_l - -#endif diff --git a/mach/m68k2/ncg/mach.c b/mach/m68k2/ncg/mach.c deleted file mode 100644 index 6759772f7..000000000 --- a/mach/m68k2/ncg/mach.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - */ - -/* - * machine dependent back end routines for the Motorola 68000, 68010 or 68020 - */ - -#include - -#if TBL68020 -#define SYNTAX_68020 1 -#endif - -#include - -con_part(sz,w) register sz; word w; { - - while (part_size % sz) - part_size++; - if (part_size == TEM_WSIZE) - part_flush(); - if (sz == 1) { - w &= 0xFF; -#if WORD_SIZE==4 - w <<= 8*(3-part_size); - part_word |= w; - } else if (sz == 2) { - w &= 0xFFFF; -#endif - if (part_size == 0) { - /* Shift 8 for m68k2, 16 otherwise */ - w <<= 4 * TEM_WSIZE; - } - part_word |= w; - } else { - assert(sz == TEM_WSIZE); - part_word = w; - } - part_size += sz; -} - -con_mult(sz) word sz; { - - if (sz != 4) - fatal("bad icon/ucon size"); - fprintf(codefile,".data4 %s\n",str); -} - -#define IEEEFLOAT -#define CODE_GENERATOR -#define FL_MSL_AT_LOW_ADDRESS 1 -#define FL_MSW_AT_LOW_ADDRESS 1 -#define FL_MSB_AT_LOW_ADDRESS 1 -#include - -regscore(off,size,typ,score,totyp) - long off; -{ - if (score == 0) return -1; - switch(typ) { - case reg_float: - return -1; - case reg_pointer: - if (size != 4 || totyp != reg_pointer) return -1; - score += (score >> 1); - break; - case reg_loop: - score += 5; - /* fall through .. */ - case reg_any: - if (size != TEM_WSIZE || totyp == reg_pointer) return -1; - break; - } - if (off >= 0) { - /* parameters must be initialised with an instruction - * like "move.l 4(a6),d0", which costs 2 words. - */ - score -= 2; - } - score--; /* save/restore */ - return score; -} -struct regsav_t { - char *rs_reg; /* e.g. "a3" or "d5" */ - long rs_off; /* offset of variable */ - int rs_size; /* 2 or 4 bytes */ -} regsav[9]; - - -int regnr; - -i_regsave() -{ - regnr = 0; -} - -full nlocals; - -regreturn() -{ - register struct regsav_t *p; - - if (regnr > 1) { -#ifdef SYNTAX_68020 - fprintf(codefile,"movem.l (-%ld,a6),", nlocals); -#else - fprintf(codefile,"movem.l -%ld(a6),", nlocals); -#endif - for (p = regsav; ;) { - fputs(p->rs_reg, codefile); - if (++p == ®sav[regnr]) break; - putc('/',codefile); - } - putc('\n',codefile); - } else if (regnr == 1) { - p = regsav; -#ifdef SYNTAX_68020 - fprintf(codefile,"move.l (-%ld,a6),%s\n",nlocals, p->rs_reg); -#else - fprintf(codefile,"move.l -%ld(a6),%s\n",nlocals, p->rs_reg); -#endif - } - fputs("unlk a6\nrts\n", codefile); -} - -f_regsave() -{ - register struct regsav_t *p; - - nlocals += regnr*4; -#ifdef TBL68020 - fprintf(codefile,"link\ta6,#-%ld\n",nlocals); -#else - if (nlocals > 32768) { - fprintf(codefile, "move.l a6,-(sp)\nmove.l sp,a6\nsub #%ld,sp\n", nlocals); - } - else fprintf(codefile,"link\ta6,#-%ld\n",nlocals); -#endif -#ifndef NOSTACKTEST - fprintf(codefile, "tst.b %s\n", -#ifdef SYNTAX_68020 - "(-40, sp)" -#else - "-40(sp)" -#endif - ); -#endif - if (regnr > 1) { - fputs("movem.l ", codefile); - for (p = regsav; ;) { - fputs(p->rs_reg, codefile); - if (++p == ®sav[regnr]) break; - putc('/',codefile); - } - fputs(",(sp)\n", codefile); - } else if (regnr == 1) { - p = regsav; - fprintf(codefile,"move.l %s,(sp)\n",p->rs_reg); - } - /* initialise register-parameters */ - for (p = regsav; p < ®sav[regnr]; p++) { - if (p->rs_off >= 0) { -#ifdef SYNTAX_68020 - fprintf(codefile,"move.%c (%ld,a6),%s\n", -#else - fprintf(codefile,"move.%c %ld(a6),%s\n", -#endif - (p->rs_size == 4 ? 'l' : 'w'), - p->rs_off, - p->rs_reg); - } - } -} - -regsave(s,off,size) - char *s; - long off; -{ - assert (regnr < 9); - regsav[regnr].rs_reg = s; - regsav[regnr].rs_off = off; - regsav[regnr++].rs_size = size; - fprintf(codefile, "!Local %ld into %s\n",off,s); -} - -prolog(n) full n; { - - nlocals = n; -} - -#ifdef MACH_OPTIONS -static int gdb_flag = 0; - -mach_option(s) - char *s; -{ - if (! strcmp(s, "-gdb")) { - gdb_flag = 1; - } - else { - error("Unknown flag %s", s); - } -} -#endif /* MACH_OPTIONS */ - -mes(type) word type ; { - int argt, a1, a2 ; - - switch ( (int)type ) { - case ms_ext : - for (;;) { - switch ( argt=getarg( - ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) { - case sp_cend : - return ; - default: - strarg(argt) ; - fprintf(codefile,".define %s\n",argstr) ; - break ; - } - } - case ms_stb: - argt = getarg(str_ptyp | cst_ptyp); - if (argt == sp_cstx) - fputs(".symb \"\", ", codefile); - else { - fprintf(codefile, ".symb \"%s\", ", str); - argt = getarg(cst_ptyp); - } - a1 = argval; - argt = getarg(cst_ptyp); - a2 = argval; - argt = getarg(cst_ptyp|nof_ptyp|sof_ptyp|ilb_ptyp|pro_ptyp); -#ifdef MACH_OPTIONS - if (gdb_flag) { - if (a1 == N_PSYM) { - /* Change offset from AB into offset from - the frame pointer. - */ - argval += 8; - } - } -#endif - fprintf(codefile, "%s, 0x%x, %d\n", strarg(argt), a1, a2); - argt = getarg(end_ptyp); - break; - case ms_std: - argt = getarg(str_ptyp | cst_ptyp); - if (argt == sp_cstx) - str[0] = '\0'; - else { - argt = getarg(cst_ptyp); - } - swtxt(); - if (argval == N_SLINE -#ifdef MACH_OPTIONS - && ! gdb_flag -#endif - ) { -#ifdef SYNTAX_68020 - fputs("jsr (___u_LiB)\n", codefile); -#else - fputs("jsr ___u_LiB\n", codefile); -#endif - cleanregs(); /* debugger might change variables */ - } - fprintf(codefile, ".symd \"%s\", 0x%x,", str, (int) argval); - argt = getarg(cst_ptyp); - fprintf(codefile, "%d\n", (int) argval); - argt = getarg(end_ptyp); - break; - default : - while ( getarg(any_ptyp) != sp_cend ) ; - break ; - } -} - - -char *segname[] = { - ".sect .text", /* SEGTXT */ - ".sect .data", /* SEGCON */ - ".sect .rom", /* SEGROM */ - ".sect .bss" /* SEGBSS */ -}; diff --git a/mach/m68k2/ncg/mach.h b/mach/m68k2/ncg/mach.h deleted file mode 100644 index 647a04322..000000000 --- a/mach/m68k2/ncg/mach.h +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include - -#ifndef TBL68020 -#ifndef TBL68000 -Something is very wrong here. You must specify the machine: either -TBL68000 or TBL68020, in the file whichone.h, then REMOVE tables.c -and then run "make" again -#endif -#endif -#if WORD_SIZE!=2 && WORD_SIZE!=4 -You must specify the appropriate word size, then REMOVE tables.c -#endif - -#define ex_ap(y) fprintf(codefile,".extern %s\n",y) -#define in_ap(y) /* nothing */ - -#define newilb(x) fprintf(codefile,"%s:\n",x) -#define newdlb(x) fprintf(codefile,"%s:\n",x) -#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y) -#define newlbss(l,x) fprintf(codefile,".comm %s,%ld\n",l,x); - -#define pop_fmt "(sp)+" -#define cst_fmt "%ld" -#define off_fmt "%ld" -#define ilb_fmt "I%x_%x" -#define dlb_fmt "I_%d" -#define hol_fmt "hol%d" - -#define hol_off "%ld+hol%d" - -#if WORD_SIZE==2 -#define con_cst(x) fprintf(codefile,".data2\t%ld\n",x) -#else -#define con_cst(x) fprintf(codefile,".data4\t%ld\n",x) -#endif -#define con_ilb(x) fprintf(codefile,".data4\t%s\n",x) -#define con_dlb(x) fprintf(codefile,".data4\t%s\n",x) - -#define modhead ".sect .text\n.sect .rom\n.sect .data\n.sect .bss\n" - -#define fmt_id(sf,st) sprintf(st,"_%s",sf) - -#define BSS_INIT 0 -#define MACH_OPTIONS diff --git a/mach/m68k2/ncg/table b/mach/m68k2/ncg/table deleted file mode 100644 index a53b6bcec..000000000 --- a/mach/m68k2/ncg/table +++ /dev/null @@ -1,6942 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ - -rscid = "$Id$" - - /******************************** - * * - * 68000, 68010 and 68020 * - * back end table * - * * - ********************************/ - -#include - -#if TBL68881 && ! TBL68020 -Something very wrong here! -#endif -#if WORD_SIZE!=2 && WORD_SIZE!=4 -Something very wrong here! -#endif - -#if TBL68020 -#define SYNTAX_68020 1 -#endif - -/* #define FANCY_MODES 1 -/* On the M68020, there are some real fancy addressing modes. - Their use makes the code a bit shorter, but also much slower. - The FANCY_MODES #define enables the use of these addressing - modes. -*/ - -#define small(x) ((x)>=1 && (x)<=8) -#define directadd(x) (small(x) || (x)>128) -#define directsub(x) (directadd(0-x)) -#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8) -#define low8(x) ((x) & 0377) -#define low16(x) ((x) & 0177777) -#define in_1(x) sfit(x,8) -#define in_2(x) sfit(x,16) - - -EM_WSIZE = WORD_SIZE -EM_PSIZE = 4 -EM_BSIZE = 8 - -SL = 8 - -TIMEFACTOR = 1/2 - - -PROPERTIES - -D_REG /* data registers */ -A_REG(4) /* address registers */ -DD_REG /* allocatable D_REG, may not be a register variable */ -AA_REG(4) /* allocatable A_REG, may not be a register variable */ -RD_REG /* data register, register var */ -RA_REG(4) /* address register, register var */ -#if WORD_SIZE==2 -D_REG4(4) /* data register, 4 bytes */ -DD_REG4(4) /* allocatable D_REG, 4 bytes */ -#else -#define D_REG4 D_REG -#define DD_REG4 DD_REG -#endif -#if TBL68881 -FS_REG(4) /* floating point register */ -FD_REG(8) /* double floating point register */ -#endif - - - -REGISTERS - -d0, d1, d2 :D_REG, DD_REG. -d3, d4, d5, d6, d7 :D_REG, RD_REG regvar. -#if WORD_SIZE==2 -dl0("d0")=d0, dl1("d1")=d1, dl2("d2")=d2 :D_REG4, DD_REG4. -#else -#define dl0 d0 -#define dl1 d1 -#define dl2 d2 -#endif -a0, a1 :A_REG, AA_REG. -a2, a3, a4, a5 :A_REG, RA_REG regvar(reg_pointer). -lb ("a6"), sp :A_REG. /* localbase and stack pointer */ -#if TBL68881 -F0 ("fp0"), F1 ("fp1"), F2 ("fp2"), F3 ("fp3"), F4 ("fp4"), F5 ("fp5"), -F6 ("fp6"), F7 ("fp7") :FS_REG. -fp0=F0,fp1=F1,fp2=F2,fp3=F3,fp4=F4,fp5=F5,fp6=F6,fp7=F7 - :FD_REG. -#endif - - - -TOKENS - - /* Not all addressing modes available on the MC68020 are used in this - * table. E.g (Dn), data register indirect is not used. Compared to - * (An), address register indirect, (Dn) requires two more bytes and - * several more clock cycles. Using (Dn) is even more expensive in - * time than first moving Dn to an address register An, and then using - * (An). For this kind of reasons several addressing modes are - * not used in this table. - * - * Cost in bytes may sometimes be incorrect. Several effective addresses - * use displacements that can occupy either 2 or 4 bytes. These are not - * considered different TOKENS in this table. - * - * Data registers are the only registers used as index registers in this - * table; address registers are only used to hold addresses. - * - * For the m68k2 and m68k4 table: the MC68000 and MC68010 have two - * modes that use displacements (offsets) of limited size: - * - offset(A_REG, Index_reg), where offset is only 8 bits, and - * - offset(A_REG), where offset can only be 16 bits. - * To make sure that no output is given with offsets too large, two - * extra tokens are declared: t_regAregXcon and t_regAcon. These are - * used as addresses to these modes. Whenever the displacements become - * too large, they are transformed into different tokens. - * - * Sometimes some TOKENS are used with displacements (offsets) of 0. - * It would have been possible to provide separate TOKENS for these, in - * case the assembler doesn't handle zero offsets optimally. This - * however would mean a very large amount of extra TOKENS and SETS for - * a very small profit in code bytes, so we won't do that. - * - * To prevent the TOKENS list from getting too unreadable, #ifdefs are - * used to form three parts: - * (i) the common part; - * (ii) the m68k2 and m68k4 part; - * (iii) the m68020 part; - */ - - /* Part (i) */ -zero_const = {INT num;} WORD_SIZE cost(0,0) "#" num . -small_const = {INT num;} WORD_SIZE cost(0,0) "#" num . -bconst = {INT num;} WORD_SIZE cost(0,0) "#" num . -const = {INT num;} WORD_SIZE cost(4,4) "#" num . -#if WORD_SIZE==2 -/* ??? "string+const */ -zero_const4 = {INT num;} 4 cost(0,0) "#" num . -small_const4 = {INT num;} 4 cost(0,0) "#" num . -bconst4 = {INT num;} 4 cost(0,0) "#" num . -const4 = {ADDR num;} 4 cost(4,4) "#" num . -#endif -indirect4 = {A_REG reg;} 4 cost(0,4) "(" reg ")" . -post_inc4 = {A_REG reg;} 4 cost(0,4) "(" reg ")+" . -pre_dec4 = {A_REG reg;} 4 cost(0,5) "-(" reg ")" . -dreg4 = {D_REG4 reg;} 4 cost(0,0) reg . -areg = {A_REG reg;} 4 cost(0,0) reg . -dreg2 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -indirect2 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")" . -post_inc2 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")+" . -pre_dec2 = {A_REG reg;} WORD_SIZE cost(0,5) "-(" reg ")" . -dreg1 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -indirect1 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")" . -post_inc1 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")+" . -pre_dec1 = {A_REG reg;} WORD_SIZE cost(0,5) "-(" reg ")" . - -ext_addr = {ADDR bd;} 4 cost(4,5) "#" bd . -llabel = {ADDR bd;} 4 cost(2,0) bd . -slabel = {ADDR bd;} 4 cost(0,0) bd . - -/* check this out */ -extend1 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -#if WORD_SIZE==2 -extend1_4 = {D_REG4 reg;} 4 cost(0,0) reg . -#else -#define extend1_4 extend1 -#endif -extend2 = {D_REG4 reg;} 4 cost(0,0) reg . - -#ifndef SYNTAX_68020 - /* Part (ii) in m68k2/4 syntax */ -absolute4 = {ADDR bd;} 4 cost(4,8) bd . -offsetted4 = {A_REG reg; INT bd;} 4 cost(2,6) bd "(" reg ")" . -index_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,7) - bd "(" reg "," xreg ".l)" . -absolute2 = {ADDR bd;} WORD_SIZE cost(4,6) bd . -offsetted2 = {A_REG reg; INT bd;} WORD_SIZE cost(2,4) bd "(" reg ")" . -index_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(2,5) - bd "(" reg "," xreg ".l)" . -absolute1 = {ADDR bd;} WORD_SIZE cost(4,6) bd . -offsetted1 = {A_REG reg; INT bd;} WORD_SIZE cost(2,4) bd "(" reg ")" . -index_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(2,5) - bd "(" reg "," xreg ".l)" . - -LOCAL = {INT bd;} WORD_SIZE cost(2,6) bd "(a6)" . -#if WORD_SIZE==2 -/* pointers may go into DLOCAL's */ -DLOCAL = {INT bd;} 4 cost(2,6) bd "(a6)" . -#endif - -local_addr = {INT bd;} 4 cost(2,6) bd "(a6)" . -regAcon = {A_REG reg; INT bd;} 4 cost(2,6) bd "(" reg ")" . -regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,8) - bd "(" reg "," xreg ".l)" . - /* note: in the m68k[24] version %sc always equals 1 */ -#endif - -#ifdef SYNTAX_68020 - /* Part (ii) in m68020 syntax */ -absolute4 = {ADDR bd;} 4 cost(4,7) "(" bd ")" . -offsetted4 = {A_REG reg; INT bd;} 4 cost(2,6) "(" bd "," reg ")" . -index_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . -absolute2 = {ADDR bd;} WORD_SIZE cost(4,7) "(" bd ")" . -offsetted2 = {A_REG reg; INT bd;} WORD_SIZE cost(2,6) "(" bd "," reg ")" . -index_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . -absolute1 = {ADDR bd;} WORD_SIZE cost(4,7) "(" bd ")" . -offsetted1 = {A_REG reg; INT bd;} WORD_SIZE cost(2,6) "(" bd "," reg ")" . -index_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . - -LOCAL = {INT bd;} WORD_SIZE cost(2,6) "(" bd ",a6)" . -#if WORD_SIZE==2 -/* pointers may go into DLOCAL's */ -DLOCAL = {INT bd;} 4 cost(2,6) "(" bd ",a6)" . -#endif -local_addr = {INT bd;} 4 cost(2,3) "(" bd ",a6)" . -regAcon = {A_REG reg; INT bd;} 4 cost(2,3) "(" bd "," reg ")" . -regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,7) - "(" bd "," reg "," xreg ".l*" sc ")" . -#endif -#ifdef TBL68020 - /* Part (iii) */ -abs_index4 = {INT sc; D_REG4 xreg; ADDR bd;} 4 cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off4 = {A_REG reg; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off4 = {ADDR bd; ADDR od;} 4 cost(8,22) "([" bd "]," od ")" . -ABS_indoff4 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off4 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -abs_index2 = {INT sc; D_REG4 xreg; ADDR bd;} WORD_SIZE cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off2 = {A_REG reg; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off2 = {ADDR bd; ADDR od;} WORD_SIZE cost(8,22) "([" bd "]," od ")" . -ABS_indoff2 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off2 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -abs_index1 = {INT sc; D_REG4 xreg; ADDR bd;} WORD_SIZE cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off1 = {A_REG reg; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off1 = {ADDR bd; ADDR od;} WORD_SIZE cost(8,22) "([" bd "]," od ")" . -ABS_indoff1 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off1 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -ILOCAL = {INT bd;} WORD_SIZE cost(4,16) "([" bd ",a6])" . - -off_con = {A_REG reg; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "]," od ")". -off_regXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -indoff_con = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -abs_con = {ADDR bd; ADDR od;} 4 cost(8,21) "([" bd "]," od ")" . -abs_regXcon = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,21) - "([" bd "]," xreg ".l*" sc "," od ")" . -absind_con = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,21) - "([" bd "," xreg ".l*" sc "]," od ")" . -ext_regX = {INT sc; D_REG4 xreg; ADDR bd;} 4 cost(6,15) - "(" bd "," xreg ".l*" sc ")" . - -regX = {INT sc; D_REG4 xreg;} 4 cost(2,7) "(" xreg ".l*" sc ")" . -DREG_pair = {D_REG4 reg1; D_REG4 reg2;} 8 cost(2,0) reg1 ":" reg2 . - -#define t_regAregXcon regAregXcon -#define t_regAcon regAcon - -#else /* TBL68020 */ -t_regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,8) . -t_regAcon = {A_REG reg; INT bd;} 4 cost(2,6) . -#endif - -#if WORD_SIZE!=2 -#define DLOCAL LOCAL -#endif - -SETS - - /* The SETS list cannot be kept as 'readable' as the TOKENS - * list because cgg is one pass. - * We makes use of the fact that sets are indeed sets. Thus - * D_REG + D_REG4 == D_REG, when the wordsize is 4. - */ - -sconsts = small_const + bconst . -consts = const + sconsts + zero_const. -#if WORD_SIZE!=2 -#define small_const4 small_const -#define zero_const4 zero_const -#define bconst4 bconst -#define const4 const -#define sconsts4 sconsts -#define consts4 consts -#else -sconsts4 = small_const4 + bconst4 . -consts4 = const4 + sconsts4 + zero_const4. -#endif - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -data4 = D_REG4 + DLOCAL + consts4 + post_inc4 + pre_dec4 + - indirect4 + offsetted4 + index_off4 + absolute4 + - ext_addr + dreg4 . -memory4 = data4 - D_REG4 - dreg4 . -control4 = indirect4 + offsetted4 + index_off4 + absolute4 + - DLOCAL. -alterable4 = data4 + A_REG - consts4 - ext_addr . -any4 = data4 + A_REG . /* all four above together */ - -#if WORD_SIZE==2 -data2 = D_REG + LOCAL + dreg2 + post_inc2 + pre_dec2 + - indirect2 + offsetted2 + index_off2 + absolute2 + - consts . -memory2 = data2 - D_REG - dreg2 . -control2 = indirect2 + offsetted2 + index_off2 + absolute2 + LOCAL. -#else -data2 = dreg2 + post_inc2 + pre_dec2 + indirect2 + - offsetted2 + index_off2 + absolute2 + consts . -memory2 = data2 - dreg2 . -control2 = indirect2 + offsetted2 + index_off2 + absolute2 . -#endif -alterable2 = data2 + D_REG - consts . -any2 = data2 + D_REG . - -data1 = dreg1 + post_inc1 + pre_dec1 + indirect1 + - offsetted1 + index_off1 + absolute1 + consts . -memory1 = data1 - dreg1 . -control1 = indirect1 + offsetted1 + index_off1 + absolute1 . -alterable1 = data1 + D_REG - consts . -any1 = data1 + D_REG . - -#else /* TBL68020 */ - -data4 = D_REG4 + indirect4 + post_inc4 + pre_dec4 + index_off4 + - offsetted4 + OFF_off4 + OFF_indoff4 + - INDOFF_off4 + dreg4 + - ABS_off4 + ABS_indoff4 + ABSIND_off4 + - absolute4 + abs_index4 + consts4 + ext_addr + - DLOCAL -#if WORD_SIZE!=2 - + ILOCAL -#endif - . -memory4 = data4 - D_REG4 - dreg4 . -control4 = memory4 - (post_inc4 + pre_dec4 + consts4 + ext_addr). -alterable4 = data4 + A_REG - consts - ext_addr . -any4 = data4 + A_REG . /* all four above together */ - -#if WORD_SIZE==2 -data2 = D_REG + LOCAL+ ILOCAL+ - dreg2 + indirect2 + post_inc2 + pre_dec2 + index_off2 + - offsetted2 + OFF_off2 + OFF_indoff2 + - INDOFF_off2 + - ABS_off2 + ABS_indoff2 + ABSIND_off2 + - absolute2 + abs_index2 + consts . -memory2 = data2 - D_REG - dreg2 . -#else -data2 = dreg2 + indirect2 + post_inc2 + pre_dec2 + index_off2 + - offsetted2 + OFF_off2 + OFF_indoff2 + - INDOFF_off2 + - ABS_off2 + ABS_indoff2 + ABSIND_off2 + - absolute2 + abs_index2 + consts . -memory2 = data2 - dreg2 . -#endif -control2 = memory2 - (post_inc2 + pre_dec2 + consts ) . -alterable2 = data2 + D_REG - consts . -any2 = data2 + D_REG. /* all four above together */ - -data1 = dreg1 + indirect1 + post_inc1 + pre_dec1 + index_off1 + - offsetted1 + OFF_off1 + OFF_indoff1 + - INDOFF_off1 + - ABS_off1 + ABS_indoff1 + ABSIND_off1 + - absolute1 + abs_index1 + consts . -memory1 = data1 - dreg1 . -control1 = memory1 - (post_inc1 + pre_dec1 + consts ) . -alterable1 = data1 + D_REG - consts . -any1 = data1 + D_REG. /* all four above together */ - -#endif /* TBL68020 */ - /* This is a common part */ -#if WORD_SIZE==2 -/* Not any4, since any is used in 'with' and not in 'kills' */ -any = any2 + any1 . -#else -any = any4 + any2 + any1 . -#endif -control = control4 + control2 + control1 . -indirect = indirect4 + indirect2 + indirect1 . -offsetted = offsetted4 + offsetted2 + offsetted1 . -index_off = index_off4 + index_off2 + index_off1 . -absolute = absolute4 + absolute2 + absolute1 . -pre_post = pre_dec4 + pre_dec2 + pre_dec1 + - post_inc4 + post_inc2 + post_inc1 . - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -regind_addr = regAcon + regAregXcon + t_regAcon + t_regAregXcon . -address = ext_addr + local_addr + regAcon + regAregXcon . -all_regind = indirect + offsetted + pre_post + index_off + - regind_addr + areg . -all_indir = all_regind . -allexceptcon = ALL - ( D_REG + A_REG + consts + dreg2 + dreg1 + - local_addr + ext_addr + regAcon + regAregXcon + - t_regAcon + t_regAregXcon ) . -use_index = index_off4 + index_off2 + index_off1 . - -#else /* TBL68020 */ - -reg_memind4 = OFF_off4 + OFF_indoff4 + INDOFF_off4 . -memind4 = reg_memind4 + - ABS_off4 + ABS_indoff4 . -reg_memind2 = OFF_off2 + OFF_indoff2 + INDOFF_off2 . -memind2 = reg_memind2 + - ABS_off2 + ABS_indoff2 . -reg_memind1 = OFF_off1 + OFF_indoff1 + INDOFF_off1 . -memind1 = reg_memind1 + - ABS_off1 + ABS_indoff1 . -reg_memind = reg_memind4 + reg_memind2 + reg_memind1 . -memind = memind4 + memind2 + memind1 . -regind_addr = regAcon + regAregXcon + - off_con + off_regXcon + - indoff_con . -address = regind_addr + - ext_addr + local_addr + - abs_con + abs_regXcon + - absind_con + - ext_regX . -all_regind = indirect + offsetted + index_off + pre_post + - reg_memind + regind_addr + areg . -all_indir = all_regind + memind + ILOCAL . -allexceptcon = ALL - ( D_REG + A_REG + consts + dreg2 + dreg1 + - local_addr + ext_addr + regAcon + regAregXcon + ext_regX ) . -use_index4 = index_off4 + abs_index4 + - OFF_indoff4 + INDOFF_off4 + - ABS_indoff4 + ABSIND_off4 . -use_index2 = index_off2 + abs_index2 + - OFF_indoff2 + INDOFF_off2 + - ABS_indoff2 + ABSIND_off2 . -use_index1 = index_off1 + abs_index1 + - OFF_indoff1 + INDOFF_off1 + - ABS_indoff1 + ABSIND_off1 . -use_indaddr = regAregXcon + - off_regXcon + indoff_con + - abs_regXcon + absind_con + - ext_regX . - -use_index = use_index4 + use_index2 + use_index1 + use_indaddr + regX . - -#endif /* TBL68020 */ - /* A common part */ -posextern = absolute + all_indir . - -#if WORD_SIZE==2 -genreg2 = D_REG . -#define genreg genreg2 -#else -#define genreg genreg4 -#endif -genreg4 = D_REG4 + A_REG. -label = llabel + slabel . -immediate4 = consts4 + ext_addr . -#if WORD_SIZE==2 -immediate2 = consts . -#endif -conreg4 = D_REG4 + immediate4 . -conreg2 = dreg2 + consts + D_REG . -conreg1 = dreg1 + consts + D_REG . -#if WORD_SIZE==2 -conreg = conreg1 + conreg2 . -#else -conreg = conreg1 + conreg2 + conreg4 . -#endif -shconreg = D_REG + small_const . -datalt4 = data4 * alterable4 . -datalt2 = data2 * alterable2 . -datalt1 = data1 * alterable1 . -datalt = datalt4 + datalt2 + datalt1 . -memalt4 = memory4 * alterable4 . -memalt2 = memory2 * alterable2 . -memalt1 = memory1 * alterable1 . - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -imm_cmp4 = alterable4 - A_REG . -imm_cmp2 = alterable2 + D_REG . -imm_cmp1 = datalt1 + D_REG . - -test_set4 = datalt4 + extend2 + extend1_4 . -#if WORD_SIZE==2 -test_set2 = datalt2 + extend1 . -#else -test_set2 = datalt2 . -#endif -test_set1 = datalt1 . - -#else /* TBL68020 */ - -imm_cmp4 = any4 - immediate4 - A_REG . -imm_cmp2 = any2 - consts . -imm_cmp1 = any1 - consts . - -test_set4 = any4 - immediate4 + extend2 + extend1_4 . -#if WORD_SIZE==2 -test_set2 = data2 + extend1 - immediate2 . -#else -test_set2 = data2 - consts . -#endif -test_set1 = data1 - consts . - -#endif /* TBL68020 */ - -test_set = test_set4 + test_set2 + test_set1 . - -#ifndef TBL68020 -t_address = address + t_regAregXcon + t_regAcon . -#else /* TBL68020 */ -#define t_address address -#endif /* TBL68020 */ - -#if TBL68881 -freg = FD_REG + FS_REG . -store4 = any4 + FS_REG . -#else -store4 = any4 . -#endif -#if WORD_SIZE==2 -dups2 = genreg2 . -#endif -dups4 = genreg4 . - -#include "instrmacs.h" - -INSTRUCTIONS - - /* Since the 68000 , the 68010 and the 68020 instruction sets are rather - * extensive, especially because e.g. 'add.l' and 'add.w' are - * considered different instructions, only those instructions are - * listed here that are used in the rest of this table. - * - * Instruction timing cost cannot be accurately given, nor the timing - * cost for getting operands. Detailed information about this can be - * found in the "MC68020 User's Manual", section 9, about instruction - * timing. The cost used in this table are 'worst case' cost, as - * mentioned in section 9 of the user's manual. Furthermore, the - * timing information for the 68k[24] and the 68020 differ, which - * means that the 68k[24] will not always have the best code - * possible. - * - * The first few instructions had to be added because register - * variables are used. The LOCALs below are register variables. - * One may not conclude that these operations are also allowed - * on LOCALs that are not register variables. - * The cost have been adapted, but are not accurate; when 'real' - * LOCALs are used the cost are very inaccurate. - */ - -add_i ADD_I any_int:ro, LOCAL:rw:cc cost(0,0). -sub_i SUB_I any_int:ro, LOCAL:rw:cc cost(0,0). -lea address:ro, DLOCAL:wo cost(0,0). -sh "illegal" shconreg+LOCAL:ro, LOCAL:rw:cc cost(0,0). -xxx "illegal" data4:ro, LOCAL:rw:cc cost(0,0). -xxx "illegal" LOCAL:ro, alterable4:rw:cc cost(0,0). -#if WORD_SIZE==2 -/* divs_w "divs.w" data2:ro, LOCAL:rw:cc cost(0,56). */ -/* divu_w "divu.w" data2:ro, LOCAL:rw:cc cost(0,44). */ -muls_w "muls.w" data2:ro, LOCAL:rw:cc cost(0,28). -mulu_w "mulu.w" data2:ro, LOCAL:rw:cc cost(0,28). -#endif -#if TBL68020 && WORD_SIZE!=2 -divs_l "divs.l" data4:ro, LOCAL:rw:cc cost(0,90). -divu_l "divu.l" data4:ro, LOCAL:rw:cc cost(0,78). -muls_l "muls.l" data4:ro, LOCAL:rw:cc cost(0,44). -mulu_l "mulu.l" data4:ro, LOCAL:rw:cc cost(0,44). -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -add_l "add.l" any4:ro, D_REG4:rw:cc cost(2,3). -#else -add_l "add.l" any4:ro, D_REG+LOCAL:rw:cc cost(2,3). -#endif -add_l "add.l" any4:ro, A_REG+DLOCAL+areg:rw cost(2,3). -add_l "add.l" conreg4:ro, alterable4:rw:cc cost(2,6). -#if WORD_SIZE==2 -add_w "add.w" any2:ro, D_REG+LOCAL:rw:cc cost(2,3). -add_w "add.w" conreg2:ro, alterable2:rw:cc cost(2,6). -#endif -and_l "and.l" data4:ro, D_REG4:rw:cc cost(2,3). -and_l "and.l" D_REG4:ro, memalt4:rw:cc cost(2,6). -and_l "and.l" consts4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -and_w "and.w" data2:ro, D_REG:rw:cc cost(2,3). -and_w "and.w" D_REG:ro, memalt2:rw:cc cost(2,6). -and_w "and.w" consts:ro, datalt2:rw:cc cost(2,6). -#endif -asl_l "asl.l" shconreg:ro, D_REG4:rw:cc cost(2,5). -asl "asl #1," memalt2:rw:cc cost(2,4). -asr_l "asr.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -asr "asr #1," memalt2:rw:cc cost(2,4). -#if WORD_SIZE==2 -asl_w "asl.w" shconreg:ro, D_REG:rw:cc cost(2,5). -asr_w "asr.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -bclr const:ro, D_REG:rw kills:cc cost(2,4). -bra label cost(2,5). -bcc label cost(2,5). -bcs label cost(2,5). -beq label cost(2,5). -bge label cost(2,5). -bgt label cost(2,5). -bhi label cost(2,5). -ble label cost(2,5). -bls label cost(2,5). -blt label cost(2,5). -bmi label cost(2,5). -bne label cost(2,5). -bpl label cost(2,5). -bvc label cost(2,5). -bvs label cost(2,5). -bset conreg2:ro, D_REG+D_REG4:rw kills :cc cost(2,4). -btst conreg2:ro, any1:rw kills :cc cost(2,3). -/* Check dreg[21] for m68020 and m68k2 */ -clr_l "clr.l" D_REG4+dreg4:wo:cc cost(2,3). -clr_l "clr.l" memalt4:wo:cc cost(2,6). -clr_w "clr.w" D_REG+dreg2:wo:cc cost(2,2). -clr_w "clr.w" memalt2:wo:cc cost(2,4). -clr_b "clr.b" D_REG+dreg1:wo:cc cost(2,2). -clr_b "clr.b" memalt1:wo:cc cost(2,4). -cmp_l "cmp.l" any4:ro, genreg4:ro kills :cc cost(2,3). -cmp_l "cmp.l" post_inc4:ro, post_inc4:ro kills :cc cost(2,2). -cmp_l "cmp.l" immediate4:ro, imm_cmp4:ro kills :cc cost(2,2). -#if WORD_SIZE==2 -cmp_w "cmp.w" any2+extend2:ro, D_REG+dreg2+extend2:ro kills :cc cost(2,2). -#else -cmp_w "cmp.w" any2+extend2:ro, dreg2+extend2:ro kills :cc cost(2,2). -#endif -cmp_w "cmp.w" post_inc2:ro, post_inc2:ro kills :cc cost(2,2). -cmp_w "cmp.w" consts:ro, imm_cmp2:ro kills :cc cost(2,2). -cmp_b "cmp.b" any1+extend1+extend1_4:ro, dreg1+extend1+extend1_4:ro kills :cc cost(2,3). -cmp_b "cmp.b" post_inc1:ro, post_inc1:ro kills :cc cost(2,2). -cmp_b "cmp.b" consts:ro, imm_cmp1:ro kills :cc cost(2,2). -dbf D_REG4:rw, label cost(2,5). -eor_l "eor.l" conreg4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -eor_w "eor.w" conreg2:ro, datalt2:rw:cc cost(2,4). -#endif -/* in the next two instructions: LOCAL only allowed if register var */ -ext_l "ext.l" D_REG+LOCAL+D_REG4:rw:cc cost(2,2). -ext_w "ext.w" D_REG+LOCAL+D_REG4:rw:cc cost(2,2). -jmp address+control4 cost(2,0). -jsr address+control4 kills :cc d0 d1 d2 a0 a1 cost(2,3). -lea address+control4:ro, A_REG+areg:wo cost(2,0). -/* -lsl_l "lsl.l" shconreg:ro, D_REG:rw:cc cost(2,4). -lsl "lsl #1," memalt2:rw:cc cost(2,4). -*/ -lsr_l "lsr.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -#if WORD_SIZE==2 -lsr_w "lsr.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -lsr "lsr #1," memalt2:rw:cc cost(2,4). -/* move_l does not set the condition codes if the destination is an - address register! -*/ -move_l "move.l" any4:ro, A_REG+areg:wo cost(2,2). -move_l "move.l" any4:ro, alterable4+dreg4-(areg+A_REG):wo:cc cost(2,2). -#if WORD_SIZE==2 -move_l "move.l" sconsts:ro, D_REG+dreg2:wo:cc cost(2,2). -/* -move_l "move.l" any2:ro, alterable4+dreg4-(areg+A_REG):wo:cc cost(2,2). -*/ -move_w "move.w" any2:ro, alterable2+dreg2:wo:cc cost(2,2). -move_b "move.b" any1:ro, alterable1+dreg2:wo:cc cost(2,2). -#else -move_w "move.w" any2:ro, alterable2+dreg4:wo:cc cost(2,2). -move_b "move.b" any1:ro, alterable1+dreg4:wo:cc cost(2,2). -#endif -neg_b "neg.b" D_REG:rw:cc cost(2,3). -neg_w "neg.w" D_REG:rw:cc cost(2,3). -neg_l "neg.l" D_REG4:rw:cc cost(2,3). -neg_l "neg.l" memory4:rw:cc cost(2,6). -#if WORD_SIZE==2 -neg_w "neg.w" memory2:rw:cc cost(2,6). -#endif -not_l "not.l" D_REG4:rw:cc cost(2,3). -not_l "not.l" memory4:rw:cc cost(2,6). -#if WORD_SIZE==2 -not_w "not.w" D_REG:rw:cc cost(2,3). -not_w "not.w" memory2:rw:cc cost(2,6). -#endif -or_l "or.l" data4:ro, D_REG4:rw:cc cost(2,3). -or_l "or.l" D_REG4:ro, memalt4:rw:cc cost(2,6). -or_l "or.l" consts4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -or_w "or.w" data2:ro, D_REG:rw:cc cost(2,3). -or_w "or.w" D_REG:ro, memalt2:rw:cc cost(2,6). -or_w "or.w" consts:ro, datalt2:rw:cc cost(2,6). -#endif -rol_l "rol.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -rol "rol #1," memalt2:rw:cc cost(2,4). -ror_l "ror.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -ror "ror #1," memalt2:rw:cc cost(2,4). -#if WORD_SIZE==2 -rol_w "rol.w" shconreg:ro, D_REG:rw:cc cost(2,4). -ror_w "ror.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -roxl "roxl #1," memalt2:rw:cc cost(2,4). -roxr "roxr #1," memalt2:rw:cc cost(2,4). -sne datalt1:rw cost(2,3). -sub_l "sub.l" any4:ro, D_REG4:rw:cc cost(2,3). -sub_l "sub.l" any4+areg:ro, A_REG+areg:rw cost(2,3). -sub_l "sub.l" conreg4:ro, alterable4:rw:cc cost(2,6). -#if WORD_SIZE==2 -sub_w "sub.w" any2:ro, D_REG+LOCAL:rw:cc cost(2,3). -sub_w "sub.w" conreg2:ro, alterable2:rw:cc cost(2,6). -/* On a swap, we only want the lower part of D_REG, so don't set cc */ -swap D_REG:rw kills :cc cost(2,2). -#endif -tst_l "tst.l" test_set4:ro:cc cost(2,3). -tst_w "tst.w" test_set2+extend2:ro:cc cost(2,3). -tst_b "tst.b" test_set1+extend1+extend1_4:ro:cc cost(2,3). -unlk A_REG cost(2,6). - -bxx "illegal" label cost(2,5). -sxx "illegal" any_int:wo cost(2,5). -#if WORD_SIZE==2 -s4xx "illegal" any4:wo cost(2,5). -xxx "illegal" any4+any2:ro, any4+any2:rw:cc cost(2,3). -bit "illegal" control4+control2:rw:cc cost(2,6). -#else -xxx "illegal" any4:ro, any4:rw:cc cost(2,3). -bit "illegal" control4:rw:cc cost(2,6). -#endif -sh "illegal" shconreg:ro, D_REG:rw:cc cost(2,4). -shw "illegal" control2:rw:cc cost(2,4). - -#if WORD_SIZE==2 -divs_w "divs.w" data2:ro, D_REG:rw:cc cost(0,56). -divu_w "divu.w" data2:ro, D_REG:rw:cc cost(0,44). -muls_w "muls.w" data2:ro, D_REG:rw:cc cost(0,28). -mulu_w "mulu.w" data2:ro, D_REG:rw:cc cost(0,28). -#endif -#ifdef TBL68020 -cmp2_l "cmp2.l" address+control4:ro, genreg4:ro kills :cc cost(2,18). -divs_l "divs.l" data4:ro, D_REG4:rw:cc cost(2,90). -divu_l "divu.l" data4:ro, D_REG4:rw:cc cost(2,78). -divsl_l "divsl.l" data4:ro, DREG_pair:rw kills :cc cost(2,90). -divul_l "divul.l" data4:ro, DREG_pair:rw kills :cc cost(2,78). -pea address+control4+regX cost(2,4). -#if WORD_SIZE==2 -cmp2_w "cmp2.w" address+control2:ro, genreg2:ro kills :cc cost(2,18). -extb_l "extb.l" extend1_4+D_REG4:rw:cc cost(2,4). -muls_l "muls.l" data4:ro, D_REG4:rw:cc cost(2,44). -mulu_l "mulu.l" data4:ro, D_REG4:rw:cc cost(2,44). -#else -/* in the next instruction: LOCAL only allowed if register var */ -extb_l "extb.l" extend1_4+D_REG+LOCAL:rw:cc cost(2,4). -muls_l "muls.l" data4:ro, D_REG+LOCAL:rw:cc cost(2,44). -mulu_l "mulu.l" data4:ro, D_REG+LOCAL:rw:cc cost(2,44). -#endif -#else /* TBL68020 */ -pea address+control4 cost(2,4). -#endif /* TBL68020 */ - - /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * Extra pseudo instruction; it just kills a D_REG; - * it is necessary with long divides where remainders are important; - * see also: 'pat rmi' and 'pat rmu' - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -killreg "! kill" D_REG+D_REG4+A_REG:wo cost(0,0). -killcc "! killcc" kills :cc cost(0,0). -#if TBL68881 -/* These descriptions are not very accurate, because we have no - other 8-byte objects in the table. - */ -fmove_s "fmove.s" data4:ro, freg:wo cost(4,100). -fmove_s "fmove.s" freg:ro, data4:wo cost(4,100). -fmove_d "fmove.d" freg:ro, data4:wo cost(4,100). -fmove_d "fmove.d" data4:ro, freg:ro cost(4,100). -fmove_l "fmove.l" freg:ro, D_REG:wo cost(4,100). -fmove_l "fmove.l" data4:ro, freg:wo cost(4,100). -fmove freg:ro,freg:wo cost(4,100). -fadd_s "fadd.s" data4:ro, freg:rw cost(4,100). -fadd_d "fadd.d" data4:ro, freg:rw cost(4,100). -fsub_s "fsub.s" data4:ro, freg:rw cost(4,100). -fsub_d "fsub.d" data4:ro, freg:rw cost(4,100). -fsub freg:ro, freg:rw cost(4,100). -fmul freg:ro, freg:rw cost(4,100). -fmul_s "fmul.s" data4:ro, freg:rw cost(4,100). -fmul_d "fmul.d" data4:ro, freg:rw cost(4,100). -fdiv freg:ro, freg:rw cost(4,100). -fdiv_s "fdiv.s" data4:ro, freg:rw cost(4,100). -fdiv_d "fdiv.d" data4:ro, freg:rw cost(4,100). -fcmp freg:ro, freg:ro cost(4,100). -fbeq label:ro cost(4,4). -fblt label:ro cost(4,4). -fmovecr const:ro, freg:rw cost(4,100). -fabs freg:rw cost(4,100). -fneg freg:rw cost(4,100). -fgetman freg:rw cost(4,100). -fintrz freg:ro, freg:wo cost(4,100). -fgetexp freg:ro, freg:wo cost(4,100). -fsub_l "fsub.l" const:ro, freg:rw cost(4,100). -#endif - - -MOVES - -from consts %num==0 to D_REG4+dreg4 - gen clr_l %2 - -#if WORD_SIZE==2 -from zero_const4 %num==0 to A_REG+areg - gen sub_l %2,%2 - -from zero_const4 %num==0 to D_REG4+dreg4 - gen clr_l %2 -#endif - -from consts %num==0 to A_REG+areg - gen sub_l %2,%2 - -#if WORD_SIZE==2 -from consts %num==0 to D_REG+dreg2 - gen clr_w %2 - -from sconsts to D_REG+dreg2 - gen move_l %1,%2 /* uses moveq */ - -from consts to D_REG4+dreg4 - gen move_l {const4, %1.num},%2 -#endif - -#if WORD_SIZE==2 -from sconsts4+zero_const4 %num==0 to memalt4 -#else -from consts %num==0 to memalt4 -#endif - gen clr_l %2 - -from consts %num==0 to memalt2 - gen clr_w %2 - -from consts %num==0 to memalt1 - gen clr_b %2 - -from consts to memalt1 - gen move_b {const, low8(%1.num)}, %2 - -#if WORD_SIZE!=2 -from consts to memalt2 - gen move_w {const, low16(%1.num)}, %2 -#endif - -from regAcon %bd==0 to A_REG+areg - gen move_l %1.reg, %2 - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) to A_REG+areg - gen lea {regAregXcon, %1.reg, %1.xreg, 1, %1.bd}, %2 - -from t_regAregXcon to A_REG+areg - gen lea {regAregXcon, %1.reg, %1.xreg, 1, 0}, %2 - add_l {const4, %1.bd}, %2 - -from t_regAcon sfit(%bd, 16) to A_REG+areg - gen lea {regAcon, %1.reg, %1.bd}, %2 - -from t_regAcon to A_REG+areg - gen move_l %1.reg, %2 - add_l {const4, %1.bd}, %2 -#endif /* TBL68020 */ - -from address - ext_addr to A_REG+areg - gen lea %1, %2 - -#if WORD_SIZE==2 -from ext_addr to A_REG+areg - gen lea {absolute4, %1.bd}, %2 -#endif - -from any4 to areg+A_REG - gen move_l %1, %2 - -from any4 to alterable4-(areg+A_REG) - gen move_l %1, %2 - -from any2 to alterable2 - gen move_w %1, %2 - -from any1 to alterable1 - gen move_b %1, %2 - -#if WORD_SIZE!=2 -from any4-sconsts4 to A_REG+areg - gen move_l %1, %2 - -from any2 to dreg4 - gen clr_l %2 - move_w %1, %2 -#endif - -from any1 to dreg_int - gen clr_i %2 - move_b %1, %2 - -#if WORD_SIZE==2 -from any1 to dreg2 - gen clr_w %2 - move_b %1, %2 -#endif - -#if TBL68881 -from data4 to FS_REG - gen fmove_s %1, %2 - -from FS_REG to datalt4 - gen fmove_s %1, %2 -#endif - -TESTS - -/* For the 68020 and m68k4, the extend1_4 will be extend1 */ -to test test_set4-(extend2+extend1+extend1_4) - gen tst_l %1 - -to test test_set2+extend2 - gen tst_w %1 - -to test test_set1+extend1+extend1_4 - gen tst_b %1 - - -STACKINGRULES - - -#if WORD_SIZE!=2 -from consts %num==0 to STACK - gen clr_l {pre_dec4, sp} -#else -from zero_const4 to STACK - gen clr_l {pre_dec4, sp} -from consts %num==0 to STACK - gen clr_w {pre_dec2, sp} -#endif - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) to STACK - gen pea {regAregXcon, %1.reg, %1.xreg, 1, %1.bd} - -from t_regAregXcon to STACK - gen pea {regAregXcon, %1.reg, %1.xreg, 1, 0} - add_l {const4, %1.bd}, {indirect4, sp} - -from t_regAcon sfit(%bd, 16) to STACK - gen pea {regAcon, %1.reg, %1.bd} - -from t_regAcon to STACK - gen move_l %1.reg, {pre_dec4, sp} - add_l {const4, %1.bd}, {indirect4, sp} -#endif /* TBL68020 */ - -from A_REG to STACK - gen pea {indirect4, %1} - -from address - ext_addr to STACK - gen pea %1 - -from ext_addr to STACK - gen pea {absolute4, %1.bd} - -#if WORD_SIZE!=2 -from consts to STACK - gen pea {absolute4, %1.num} -#else -from sconsts4 to STACK - gen pea {absolute4, %1.num} -from const4 to STACK - gen pea {absolute4, %1.num} -#endif - -from any4 to STACK - gen move_l %1, {pre_dec4, sp} - -#if WORD_SIZE!=2 -from any2 to STACK - uses DD_REG - gen clr_l %a - move_w %1, {dreg2, %a} - move_l %a, {pre_dec4, sp} - -from any2 to STACK - gen clr_l {pre_dec4, sp} - move_w %1, {offsetted2, sp, 2} -#else -from any2 to STACK - gen move_w %1, {pre_dec2, sp} -#endif - -from data1 to STACK - uses DD_REG -#if WORD_SIZE!=2 - gen clr_l %a - move_b %1, {dreg1, %a} - move_l %a, {pre_dec4, sp} -#else - gen clr_w %a - move_b %1, {dreg1, %a} - move_w %a, {pre_dec2, sp} -#endif - -from data1 to STACK -#if WORD_SIZE!=2 - gen clr_l {pre_dec4, sp} - move_b %1, {offsetted1, sp, 3} -#else - gen clr_w {pre_dec2, sp} - move_b %1, {offsetted1, sp, 1} -#endif - -from extend2 to STACK - gen ext_l %1.reg - move_l %1.reg,{pre_dec4, sp} - -from extend1_4 to STACK -#ifdef TBL68020 - gen extb_l %1.reg -#else - gen ext_w %1.reg - ext_l %1.reg -#endif - move_l %1.reg,{pre_dec4, sp} - -#if WORD_SIZE==2 -from extend1 to STACK - gen ext_w %1.reg - move_w %1.reg,{pre_dec2, sp} -#endif - -#ifdef TBL68020 -from regX to STACK - gen pea %1 -#endif /* TBL68020 */ - /* This last stackingrule is never used: whenever regX is put on - * the fakestack, some em-instuctions are left that remove it - * immediately. However cgg complained about not having a - * stackingrule for regX, so here it is - */ - -#if TBL68881 -from FS_REG to STACK - gen fmove_s %1,{pre_dec4,sp} - -from FD_REG to STACK - gen fmove_d %1,{pre_dec4,sp} -#endif -COERCIONS - - -from STACK - uses DD_REG4 - gen move_l {post_inc4, sp}, %a - yields %a - -#if WORD_SIZE==2 -from STACK - uses DD_REG - gen move_w {post_inc2,sp}, %a - yields %a -#endif - -from STACK - uses AA_REG - gen move_l {post_inc4, sp}, %a - yields %a - -#ifdef TBL68881 -from STACK - uses FS_REG - gen fmove_s {post_inc4, sp}, %a - yields %a -from STACK - uses FD_REG - gen fmove_d {post_inc4, sp}, %a - yields %a -#endif - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) - yields {regAregXcon, %1.reg, %1.xreg, 1, %1.bd} - -from t_regAregXcon - uses AA_REG=%1.reg - gen add_l {const4, %1.bd}, %a - yields {regAregXcon, %a, %1.xreg, 1, 0} - -/* - * The following coercions are necessary because the code generator - * must be able to make the token from the real stack, otherwise the - * coercion will not be made. Unfortunatly, inside a coercion, we are only - * allowed to allocate 1 register, which means that there is no way to make - * a regAregXcon from the stack, which, in its turn, means that the other - * coercions will not be taken. - * -/*from STACK - uses AA_REG, DD_REG4 = {zero_const4, 0} - gen move_l {post_inc4, sp}, %a - yields {regAregXcon, %a, %b, 1, 0} -*/ -from STACK - uses AA_REG - gen move_l {post_inc4, sp}, %a - yields {regAcon, %a, 0} - -from t_regAcon sfit(%bd, 16) - yields {regAcon, %1.reg, %1.bd} - -from t_regAcon - uses reusing %1, AA_REG=%1.reg - gen add_l {const4, %1.bd}, %a - yields %a -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -from regAregXcon %bd==0 && %sc==1 - uses reusing %1, AA_REG = %1.reg - gen add_l {dreg4,%1.xreg},%a - yields %a - -from regAregXcon %sc==1 - uses reusing %1, AA_REG = %1.reg - gen add_l {dreg4, %1.xreg}, %a - yields {regAcon, %a, %1.bd} -#endif - -#if WORD_SIZE==2 -from sconsts - uses DD_REG4={const4, %1.num} /* uses moveq */ - yields %a.1 -#endif - -#if WORD_SIZE==2 -from any2 -uses reusing %1, DD_REG = %1 yields %a -#endif - -from any4 - uses reusing %1, DD_REG4 = %1 - yields %a - -from any4 - uses reusing %1, AA_REG = %1 - yields %a - -from t_address - uses reusing %1, AA_REG = %1 - yields %a - -#if TBL68881 -from data4 - uses reusing %1, FS_REG = %1 - yields %a -#endif - -from memory2 - uses DD_REG -#if WORD_SIZE!=2 - = {zero_const, 0} -#endif - gen move_w %1, %a yields %a - -from memory1 - uses DD_REG = {zero_const, 0} - gen move_b %1, %a yields %a - -from memory2 - uses DD_REG - gen move_w %1, %a yields {dreg2, %a} - -from memory1 - uses DD_REG - gen move_b %1, %a yields {dreg1, %a} - -from extend2 - gen ext_l %1.reg yields %1.reg - -#if WORD_SIZE==2 -from extend1 - gen ext_w %1.reg yields %1.reg -#endif - -from extend1_4 -#ifdef TBL68020 - gen extb_l %1.reg -#else - gen ext_w %1.reg - ext_l %1.reg -#endif - yields %1.reg - -PATTERNS - -/******************************** - * First some longer patterns * - ********************************/ - -pat lol sbi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with any_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sub_i %1, {LOCAL, $1} - neg_i {LOCAL, $1} - -pat lol sbi stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer -with conreg_int-bconst - kills all_indir, LOCAL %bd==$1 - gen sub_i %1, {LOCAL, $1} - neg_i {LOCAL, $1} - -pat lol sbu stl $1==$3 && $2==WORD_SIZE - leaving lol $1 sbi WORD_SIZE stl $1 - -pat lil sbi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer -with conreg_int-bconst - kills allexceptcon - gen sub_i %1, {indirect_int, regvar($1, reg_pointer)} - neg_i {indirect_int, regvar($1, reg_pointer)} - -pat lil sbi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any -with conreg_int-bconst - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen sub_i %1, {indirect_int, %a} - neg_i {indirect_int, %a} - -pat lil sbu sil $1==$3 && $2==WORD_SIZE - leaving lil $1 sbi WORD_SIZE sil $1 - -proc lolrbitstl example lol ngi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen bit* {LOCAL, $1} - -pat lol ngi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolrbitstl(NEG_I) -pat lol com stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolrbitstl(NOT_I) - -proc lolbitstl example lol ngi stl - kills all_indir, LOCAL %bd==$1 - gen bit* {LOCAL, $1} - -pat lol ngi stl $1==$3 && $2==WORD_SIZE call lolbitstl(NEG_I) -pat lol com stl $1==$3 && $2==WORD_SIZE call lolbitstl(NOT_I) -#if WORD_SIZE==2 -proc ldlbitsdl example ldl ngi sdl - kills all_indir, DLOCAL %bd==$1 - gen bit* {DLOCAL, $1} - -pat ldl ngi sdl $1==$3 && $2==4 call ldlbitsdl("neg.l") -pat ldl com sdl $1==$3 && $2==4 call ldlbitsdl("not.l") -#endif - -proc loebitste example loe ngi ste - kills posextern - gen bit* {absolute_int, $1} - -pat loe ngi ste $1==$3 && $2==WORD_SIZE call loebitste(NEG_I) -pat loe com ste $1==$3 && $2==WORD_SIZE call loebitste(NOT_I) -#if WORD_SIZE==2 -proc ldebitsde example lde ngi sde - kills posextern - gen bit* {absolute4, $1} - -pat lde ngi sde $1==$3 && $2==4 call ldebitsde("neg.l") -pat lde com sde $1==$3 && $2==4 call ldebitsde("not.l") -#endif - -proc lilrbitsil example lil ngi sil - kills allexceptcon - gen bit* {indirect_int, regvar($1, reg_pointer)} - -pat lil ngi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilrbitsil(NEG_I) -pat lil com sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilrbitsil(NOT_I) -pat lil dec sil $1==$3 && inreg($1)==reg_pointer - call lilrbitsil(DEC) -pat lil inc sil $1==$3 && inreg($1)==reg_pointer - call lilrbitsil(INC) - -proc lilbitsil example lil ngi sil - kills allexceptcon -#if TBL68020 - gen bit* {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen bit* {indirect_int, %a} -#endif - -pat lil ngi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilbitsil(NEG_I) -pat lil com sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilbitsil(NOT_I) -pat lil dec sil $1==$3 && inreg($1)!=reg_any - call lilbitsil(DEC) -pat lil inc sil $1==$3 && inreg($1)!=reg_any - call lilbitsil(INC) - -proc lolcshstl example lol loc sli stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sh* {small_const, $2}, {LOCAL, $1} - -pat lol loc sli stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASL_I) -pat lol loc sri stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASR_I) -pat lol loc slu stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASL_I) -pat lol loc sru stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(LSR_I) -pat lol loc rol stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ROL_I) -pat lol loc ror stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ROR_I) - -proc lolrshstl example lol lol sli stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sh* {LOCAL, $2}, {LOCAL, $1} - -pat lol lol sli stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASL_I) -pat lol lol slu stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASL_I) -pat lol lol sri stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASR_I) -pat lol lol sru stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(LSR_I) -pat lol lol rol stl $1==$4 && inreg($2)==reg_any && $3==WORD_SIZE - && inreg($1)==reg_any - call lolrshstl(ROL_I) -pat lol lol ror stl $1==$4 && inreg($2)==reg_any && $3==WORD_SIZE - && inreg($1)==reg_any - call lolrshstl(ROR_I) - -#if WORD_SIZE!=2 -proc lil1shlsil example lil loc sli sil /* only left */ - kills allexceptcon - gen shw* {offsetted2, regvar($1, reg_pointer), 2} - roxl {indirect2, regvar($1, reg_pointer)} - -pat lil loc sli sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shlsil("asl #1,") -pat lil loc slu sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shlsil("asl #1,") - -proc lil1shrsil example lil loc sli sil /* only right */ - kills allexceptcon - gen shw* {indirect2, regvar($1, reg_pointer)} - roxr {offsetted2, regvar($1, reg_pointer), 2} - -pat lil loc sri sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shrsil("asr #1,") -pat lil loc sru sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shrsil("lsr #1,") - -#endif - - -pat LLP lof inc LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen add_i {const, 1}, {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof dec LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen sub_i {const, 1}, {offsetted_int, regvar($1, reg_pointer), $2} - -/* the patterns with adp should use add_l */ -pat LLP LFP adp LLP SFP $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen add_l {const4, $3}, {offsetted4, regvar($1, reg_pointer), $2} - -pat LEP LFP adp LEP SFP $1==$4 && $2==$5 - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {ABS_off4, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen add_l {const4, $3}, {offsetted4, %a, $2} -#endif - -pat LEP loi adp LEP sti $1==$4 && $2==4 && $5==4 - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {ABS_off4, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen add_l {const4, $3}, {indirect4, %a} -#endif - -#if WORD_SIZE!=2 -pat lil lof adp lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen add_l {const4, $3}, {offsetted4, %a, $2} -#endif - -pat lil loi adp lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen add_l {const4, $3}, {indirect4, %a} -#endif -#endif /* WORD_SIZE==2 */ - -pat lol inl $1==$2 && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen add_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat lol del $1==$2 && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen sub_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -/* the following rules are for unsigneds, since del and inl work on ints */ -pat lol loc lol adu stl $1==$3 && $3==$5 && $4==WORD_SIZE && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen add_i {const, $2}, {LOCAL, $1} - killreg %a - yields %a - -pat lol loc lol adu stl $1==$3 && $3==$5 && $4==WORD_SIZE - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen add_i {const, $2}, {LOCAL, $1} - killreg %a - yields %a - -pat lol dup loc sbu stl $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen sub_i {const, $3}, {LOCAL, $1} - killreg %a - yields %a - -pat lol dup loc sbu stl $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen sub_i {const, $3}, {LOCAL, $1} - killreg %a - yields %a - -pat loe loc loe adu ste $1==$3 && $3==$5 && $4==WORD_SIZE - kills posextern - uses DD_REG = {absolute_int, $1} - gen add_i {const,$2}, {absolute_int, $1} - killreg %a - yields %a - -pat loe dup loc sbu ste $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - kills posextern - uses DD_REG = {absolute_int, $1} - gen sub_i {const,$3}, {absolute_int, $1} - killreg %a - yields %a - -pat lil loc lil adu sil $1==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen add_i {const, $2}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup loc sbu sil $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen sub_i {const, $3}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -proc lolxxstl example lol and stl -with data_int-bconst - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* %1, {LOCAL, $1} - -pat lol adi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(ADD_I) -pat lol adu stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(ADD_I) -pat lol and stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(AND_I) -pat lol ior stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(OR_I) -pat lol xor stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with conreg_int-bconst - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen eor_i %1, {LOCAL, $1} - -#if TBL68020 || WORD_SIZE==2 -pat lol mli stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with data_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen muls_i %1, {LOCAL, $1} -pat lol mlu stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with data_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen mulu_i %1, {LOCAL, $1} -#endif /* TBL68020 */ - -proc lolxxxstl example lol adi stl -with conreg_int-bconst - kills all_indir, LOCAL %bd==$1 - gen xxx* %1, {LOCAL, $1} - -pat lol adi stl $1==$3 && $2==WORD_SIZE call lolxxxstl(ADD_I) -pat lol adu stl $1==$3 && $2==WORD_SIZE call lolxxxstl(ADD_I) -pat lol and stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(AND_I) -pat lol ior stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(OR_I) -pat lol xor stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(EOR_I) - -#if WORD_SIZE==2 -proc ldlxxxsdl example lol adi stl -with conreg4-bconst4 - kills all_indir, DLOCAL %bd==$1 - gen xxx* %1, {DLOCAL, $1} - -pat ldl adi sdl $1==$3 && $2==4 call ldlxxxsdl("add.l") -pat ldl adu sdl $1==$3 && $2==4 call ldlxxxsdl("add.l") -pat ldl and sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("and.l") -pat ldl ior sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("or.l") -pat ldl xor sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("eor.l") -#endif - -proc lilxxsil example lil and sil -with conreg_int-bconst - kills allexceptcon - gen xxx* %1, {indirect_int, regvar($1, reg_pointer)} - -pat lil adi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(ADD_I) -pat lil adu sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(ADD_I) -pat lil and sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(AND_I) -pat lil ior sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(OR_I) -pat lil xor sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil ads sil $1==$3 && $2==4 && inreg($1)==reg_pointer - call lilxxsil("add.l") -#endif - -proc lilxxxsil example lil adi sil -with conreg_int-bconst - kills allexceptcon -#if TBL68020 - gen xxx* %1, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* %1, {indirect_int, %a} -#endif - -pat lil adi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(ADD_I) -pat lil adu sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(ADD_I) -pat lil and sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(AND_I) -pat lil ior sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(OR_I) -pat lil xor sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil ads sil $1==$3 && $2==4 && inreg($1)!=reg_any - call lilxxxsil("add.l") -#endif - -proc loexxxste example loe adi ste -with conreg_int-bconst - kills posextern - gen xxx* %1, {absolute_int, $1} - -pat loe adi ste $1==$3 && $2==WORD_SIZE call loexxxste(ADD_I) -pat loe adu ste $1==$3 && $2==WORD_SIZE call loexxxste(ADD_I) -pat loe and ste $1==$3 && $2==WORD_SIZE call loexxxste(AND_I) -pat loe ior ste $1==$3 && $2==WORD_SIZE call loexxxste(OR_I) -pat loe xor ste $1==$3 && $2==WORD_SIZE call loexxxste(EOR_I) -#if WORD_SIZE!=2 -pat loe ads ste $1==$3 && $2==4 call loexxxste("add.l") -#endif - -#if WORD_SIZE==2 -proc ldexxxsde example lde adi sde -with conreg4-bconst4 - kills posextern - gen xxx* %1, {absolute4, $1} - -pat lde adi sde $1==$3 && $2==4 call ldexxxsde("add.l") -pat lde adu sde $1==$3 && $2==4 call ldexxxsde("add.l") -pat lde and sde $1==$3 && $2==4 call ldexxxsde("and.l") -pat lde ior sde $1==$3 && $2==4 call ldexxxsde("or.l") -pat lde xor sde $1==$3 && $2==4 call ldexxxsde("eor.l") -#endif - -proc lollilxxxstl example lol lil adi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {indirect_int, regvar($2, reg_pointer)}, {LOCAL, $1} - -pat lol lil adi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(ADD_I) -pat lol lil adu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(ADD_I) -pat lol lil sbi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(SUB_I) -pat lol lil sbu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(SUB_I) -pat lol lil and stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(AND_I) -pat lol lil ior stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(OR_I) - -proc lollfixxxstl example lol LLP lof adi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {offsetted_int, regvar($2, reg_pointer), $3}, {LOCAL, $1} - -pat lol LLP lof adi stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(ADD_I) -pat lol LLP lof adu stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(ADD_I) -pat lol LLP lof sbi stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(SUB_I) -pat lol LLP lof sbu stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(SUB_I) -pat lol LLP lof and stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(AND_I) -pat lol LLP lof ior stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(OR_I) - - -proc lolfrxlolf example LLP lof and LLP stf -with conreg_int-bconst - kills allexceptcon - gen xxx* %1, {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof adi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(ADD_I) -pat LLP lof adu LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(ADD_I) -pat LLP lof and LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(AND_I) -pat LLP lof ior LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(OR_I) -pat LLP lof xor LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(EOR_I) -#if WORD_SIZE!=2 -pat LLP lof ads LLP stf $1==$4 && $2==$5 && $3==4 - && inreg($1)==reg_pointer - call lolfrxlolf("add.l") -#endif - -proc lolfxxlolf example LLP lof and LLP stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off_int, lb, $1, $2} -#else - uses AA_REG={DLOCAL, $1} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat LLP lof adi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(ADD_I) -pat LLP lof adu LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(ADD_I) -pat LLP lof and LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(AND_I) -pat LLP lof ior LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(OR_I) -pat LLP lof xor LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(EOR_I) -#if WORD_SIZE!=2 -pat LLP lof ads LLP stf $1==$4 && $2==$5 && $3==4 - call lolfxxlolf("add.l") -#endif - -#if WORD_SIZE!=2 -proc lilfxxlilf example lil lof and lil stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat lil lof adi lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -pat lil lof adu lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -pat lil lof and lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("and.l") -pat lil lof ior lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("or.l") -pat lil lof xor lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("eor.l") -pat lil lof ads lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -#endif - -proc lefxxxsef example loe lof and loe stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {ABS_off_int, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat LEP lof adi LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(ADD_I) -pat LEP lof adu LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(ADD_I) -pat LEP lof and LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(AND_I) -pat LEP lof ior LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(OR_I) -pat LEP lof xor LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(EOR_I) -#if WORD_SIZE!=2 -pat LEP lof ads LEP stf $1==$4 && $2==$5 && $3==4 - call lefxxxsef("add.l") -#endif - -/* lil gets a word, not necessarily a pointer */ -#if WORD_SIZE!=2 -proc lilixxlili example lil loi and lil sti -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen xxx* %1, {indirect4, %a} -#endif - -pat lil loi adi lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -pat lil loi adu lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -pat lil loi and lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("and.l") -pat lil loi ior lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("or.l") -pat lil loi xor lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("eor.l") -pat lil loi ads lil sti $1==$4 && $2==$3 && $2==$5 && $3==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -#endif - -proc leixxxsei example loe loi and loe sti -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {ABS_off_int, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen xxx* %1, {indirect_int, %a} -#endif - -pat LEP loi adi LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(ADD_I) -pat LEP loi adu LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(ADD_I) -pat LEP loi and LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(AND_I) -pat LEP loi ior LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(OR_I) -pat LEP loi xor LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(EOR_I) -#if WORD_SIZE!=2 -pat LEP loi ads LEP sti $1==$4 && $2==$3 && $2==$5 && $2==4 - call leixxxsei("add.l") -#endif - -proc lofruxxsof example LLP lof inc LLP stf - kills allexceptcon - gen bit* {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof inc LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lofruxxsof(INC) -pat LLP lof dec LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lofruxxsof(DEC) -pat LLP lof ngi LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - && $3==WORD_SIZE - call lofruxxsof(NEG_I) -pat LLP lof com LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - && $3==WORD_SIZE - call lofruxxsof(NOT_I) - -proc lofuxxsof example LLP lof inc LLP stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off_int, lb, $1, $2} -#else - uses AA_REG={DLOCAL,$1} - gen bit* {offsetted_int,%a,$2} -#endif - -pat LLP lof inc LLP stf $1==$4 && $2==$5 - call lofuxxsof(INC) -pat LLP lof dec LLP stf $1==$4 && $2==$5 - call lofuxxsof(DEC) -pat LLP lof ngi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lofuxxsof(NEG_I) -pat LLP lof com LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lofuxxsof(NOT_I) - -#if WORD_SIZE!=2 -proc lifuxxsif example lil lof inc lil stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen bit* {offsetted4,%a,$2} -#endif - -pat lil lof inc lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lifuxxsif("add.l #1,") -pat lil lof dec lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lifuxxsif("sub.l #1,") -pat lil lof ngi lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lifuxxsif("neg.l") -pat lil lof com lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lifuxxsif("not.l") -#endif - -#if WORD_SIZE!=2 -proc liiuxxsii example lil loi inc lil sti - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen bit* {indirect4, %a} -#endif - -pat lil loi inc lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - call liiuxxsii("add.l #1,") -pat lil loi dec lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - call liiuxxsii("sub.l #1,") -pat lil loi ngi lil sti $1==$4 && $2==4 && $5==4 && $3==4 && inreg($1)==reg_pointer - call liiuxxsii("neg.l") -pat lil loi com lil sti $1==$4 && $2==4 && $5==4 && $3==4 && inreg($1)==reg_pointer - call liiuxxsii("not.l") -#endif - -proc lefuxxsef example loe lof inc loe stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {ABS_off_int, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen bit* {offsetted_int, %a, $2} -#endif - -pat LEP lof inc LEP stf $1==$4 && $2==$5 - call lefuxxsef(INC) -pat LEP lof dec LEP stf $1==$4 && $2==$5 - call lefuxxsef(DEC) -pat LEP lof ngi LEP stf $1==$4 && $2==$5 && $3==4 - call lefuxxsef(NEG_I) -pat LEP lof com LEP stf $1==$4 && $2==$5 && $3==4 - call lefuxxsef(NOT_I) - -proc leiuxxsei example loe loi inc loe sti - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {ABS_off_int, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen bit* {indirect_int, %a} -#endif - -pat LEP loi inc LEP sti $1==$4 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(INC) -pat LEP loi dec LEP sti $1==$4 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(DEC) -pat LEP loi ngi LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(NEG_I) -pat LEP loi com LEP sti $1==$4 && $2==$3 && 2==$5 && $2==WORD_SIZE - call leiuxxsei(NOT_I) - -proc lolcxxstl example lol loc and stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {const, $2}, {LOCAL, $1} - -/* -pat lol loc adi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(ADD_I) -pat lol loc adu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol loc sbi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(SUB_I) -pat lol loc sbu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(SUB_I) -/* -pat lol loc and stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(AND_I) -pat lol loc ior stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(OR_I) -pat lol loc xor stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(EOR_I) - peephole optimizer replaces these -*/ -#if TBL68020 || WORDSIZE==2 -#if WORD_SIZE==4 -pat lol loc dvi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(DIVS_I) -pat lol loc dvu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(DIVU_I) -#endif -pat lol loc mli stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(MULS_I) -pat lol loc mlu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(MULU_I) -#endif - -proc lolcxxxstl example lol loc adi stl - kills all_indir, LOCAL %bd==$1 - gen xxx* {const, $2}, {LOCAL, $1} - -/* -pat lol loc adi stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(ADD_I) -pat lol loc adu stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol loc sbi stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(SUB_I) -pat lol loc sbu stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(SUB_I) -/* -pat lol loc and stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(AND_I) -pat lol loc ior stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(OR_I) -pat lol loc xor stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(EOR_I) - peephole optimizer replaces these -*/ -#if WORD_SIZE==2 -proc ldlcxxxsdl example ldl ldc adi sdl - kills all_indir, DLOCAL %bd==$1 - gen xxx* {const4, $2}, {DLOCAL, $1} - -pat ldl ldc sbi sdl $1==$4 && $3==4 call ldlcxxxsdl("sub.l") -pat ldl ldc sbu sdl $1==$4 && $3==4 call ldlcxxxsdl("sub.l") -#endif - -proc lilcxxsil example lil loc and sil - kills allexceptcon - gen xxx* {const, $2}, {indirect_int, regvar($1, reg_pointer)} - -pat lil loc adi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(ADD_I) -pat lil loc adu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(ADD_I) -pat lil loc sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(SUB_I) -pat lil loc sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(SUB_I) -pat lil loc and sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(AND_I) -pat lil loc ior sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(OR_I) -pat lil loc xor sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(EOR_I) - -proc lilcxxxsil example lil loc adi sil - kills allexceptcon -#if TBL68020 - gen xxx* {const, $2}, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* {const, $2}, {indirect_int, %a} -#endif - -pat lil loc adi sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(ADD_I) -pat lil loc adu sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(ADD_I) -pat lil loc sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(SUB_I) -pat lil loc sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(SUB_I) -pat lil loc and sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(AND_I) -pat lil loc ior sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(OR_I) -pat lil loc xor sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(EOR_I) - -proc loecxxxste example loe loc adi ste - kills posextern - gen xxx* {const, $2}, {absolute4, $1} - -/* -pat loe loc adi ste $1==$4 && $3==WORD_SIZE call loecxxxste(ADD_I) -pat loe loc adu ste $1==$4 && $3==WORD_SIZE call loecxxxste(ADD_I) - peephole optimizer replaces these -*/ -pat loe loc sbi ste $1==$4 && $3==WORD_SIZE call loecxxxste(SUB_I) -pat loe loc sbu ste $1==$4 && $3==WORD_SIZE call loecxxxste(SUB_I) -/* -pat loe loc and ste $1==$4 && $3==WORD_SIZE call loecxxxste(AND_I) -pat loe loc ior ste $1==$4 && $3==WORD_SIZE call loecxxxste(OR_I) -pat loe loc xor ste $1==$4 && $3==WORD_SIZE call loecxxxste(EOR_I) - peephole optimizer replaces these -*/ - -proc lolrxxstl example lol lol and stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {LOCAL, $2}, {LOCAL, $1} - -/* -pat lol lol adi stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(ADD_I) -pat lol lol adu stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol lol sbi stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(SUB_I) -pat lol lol sbu stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(SUB_I) -/* -pat lol lol and stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(AND_I) -pat lol lol ior stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(OR_I) -pat lol lol xor stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(EOR_I) - peephole optimizer replaces these -*/ - -proc lolrxxxstl example lol lol adi stl - kills all_indir, LOCAL %bd==$1 - gen xxx* {LOCAL, $2}, {LOCAL, $1} - -/* -pat lol lol adi stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(ADD_I) -pat lol lol adu stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(ADD_I) - peephole optimizer replaces these -*/ -#if WORD_SIZE!=2 -pat lol lol ads stl $1==$4 && $3==4 && inreg($2)==reg_any - call lolrxxxstl("add.l") -#endif -pat lol lol sbi stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(SUB_I) -pat lol lol sbu stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(SUB_I) -/* -pat lol lol and stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && inreg($1)!=reg_pointer - call lolrxxxstl(AND_I) -pat lol lol ior stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && - inreg($1)!=reg_pointer - call lolrxxxstl(OR_I) -pat lol lol xor stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && - inreg($1)!=reg_pointer - call lolrxxxstl(EOR_I) - peephole optimizer replaces these -*/ - -proc lilrxxsil example lil lol and sil - kills allexceptcon - gen xxx* {LOCAL, $2}, {indirect_int, regvar($1, reg_pointer)} - -pat lil lol adi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(ADD_I) -pat lil lol adu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(ADD_I) -pat lil lol sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(SUB_I) -pat lil lol sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(SUB_I) -pat lil lol and sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(AND_I) -pat lil lol ior sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(OR_I) -pat lil lol xor sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil lol ads sil $1==$4 && $3==4 && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil("add.l") -#endif - -proc lilrxxxsil example lil lol adi sil - kills allexceptcon -#if TBL68020 - gen xxx* {LOCAL, $2}, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* {LOCAL, $2}, {indirect_int, %a} -#endif - -pat lil lol adi sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(ADD_I) -pat lil lol adu sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(ADD_I) -pat lil lol sbi sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(SUB_I) -pat lil lol sbu sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(SUB_I) -pat lil lol and sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(AND_I) -pat lil lol ior sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(OR_I) -pat lil lol xor sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil lol ads sil $1==$4 && $3==4 && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil("add.l") -#endif - -proc loerxxxste example loe lol adi ste - kills posextern - gen xxx* {LOCAL, $2}, {absolute_int, $1} - -pat loe lol adi ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(ADD_I) -pat loe lol adu ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(ADD_I) -pat loe lol sbi ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(SUB_I) -pat loe lol sbu ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(SUB_I) -pat loe lol and ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(AND_I) -pat loe lol ior ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(OR_I) -pat loe lol xor ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(EOR_I) -#if WORD_SIZE!=2 -pat loe lol ads ste $1==$4 && $3==4 && inreg($2)==reg_any - call loerxxxste("add.l") -#endif - -proc xxxstl example adi stl -with any_int-RD_REG-dreg_int any-RD_REG-dreg_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %2,{dreg_int, regvar($2)} - xxx* %1,{LOCAL,$2} -with exact any_int-RD_REG-dreg_int STACK - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move_i {post_inc_int, sp}, {dreg_int, regvar($2)} - xxx* %1,{LOCAL,$2} - -pat adi stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(ADD_I) -pat adu stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(ADD_I) -pat sbi stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(SUB_I) -pat sbu stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(SUB_I) -pat and stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(AND_I) -pat ior stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(OR_I) - -pat xor stl $1==WORD_SIZE && inreg($2)==reg_any -with D_REG any_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %2,{dreg_int, regvar($2)} - eor_i %1,{dreg_int, regvar($2)} - -pat ads SLP $1==4 && inreg($2)==reg_pointer -with any4-areg-RA_REG any4+address-areg-RA_REG - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move %2,{areg,regvar($2,reg_pointer)} - add_l %1,{areg,regvar($2,reg_pointer)} -#ifdef TBL68020 -with regX any4+address-areg-RA_REG - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move %2,{areg,regvar($2,reg_pointer)} - move {regAregXcon, regvar($2,reg_pointer), %1.xreg, %1.sc, 0},{areg,regvar($2,reg_pointer)} -with exact regX STACK - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l {post_inc4, sp},{areg,regvar($2,reg_pointer)} - move {regAregXcon, regvar($2,reg_pointer), %1.xreg, %1.sc, 0},{areg,regvar($2,reg_pointer)} -with exact regX regAcon - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {regAregXcon, %2.reg, %1.xreg, %1.sc, %2.bd},{areg,regvar($2,reg_pointer)} -with exact regX local_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {regAregXcon, lb, %1.xreg, %1.sc, %2.bd},{areg,regvar($2,reg_pointer)} -#ifdef FANCY_MODES -with exact regX indirect4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg,%1.sc,0,0},{areg,regvar($2,reg_pointer)} -with exact regX offsetted4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg, %1.sc, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX LOCAL - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, lb, %1.xreg, %1.sc, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX off_con - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg,%1.sc,%2.bd,%2.od},{areg,regvar($2,reg_pointer)} -with exact regX ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move{ext_regX, %1.sc, %1.xreg, %2.bd},{areg,regvar($2,reg_pointer)} -with exact regX absolute4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %1.sc, %1.xreg, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX abs_con - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %1.sc, %1.xreg, %2.bd, %2.od},{areg,regvar($2,reg_pointer)} -with exact indirect4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, %1.reg, 0, %2.bd},{areg,regvar($2,reg_pointer)} -with exact offsetted4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, %1.reg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact LOCAL ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, lb, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact index_off4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {indoff_con, %1.reg, %1.xreg, %1.sc,%1.bd,%2.bd},{areg,regvar($2,reg_pointer)} -with exact absolute4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_con, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact abs_index4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {absind_con, %1.sc, %1.xreg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact indirect4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %1.reg, %2.xreg, %2.sc, 0, %2.bd},{areg,regvar($2,reg_pointer)} -with exact offsetted4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %1.reg, %2.xreg,%2.sc,%1.bd,%2.bd},{areg,regvar($2,reg_pointer)} -with exact LOCAL ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, lb, %2.xreg, %2.sc, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact absolute4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %2.sc, %2.xreg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - - -proc xxxdupstl example adi dup stl -with any_int-RD_REG-dreg_int any-RD_REG-dreg_int - kills regvar($3, reg_any), use_index %xreg==regvar($3, reg_any) - gen move %2,{dreg_int, regvar($3)} - xxx* %1,{LOCAL,$3} yields {LOCAL, $3} -with exact any_int-RD_REG-dreg_int STACK - kills regvar($3, reg_any), use_index %xreg==regvar($3, reg_any) - gen move_i {post_inc_int, sp}, {dreg_int, regvar($3)} - xxx* %1,{LOCAL,$3} yields {LOCAL, $3} - -pat adi dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(ADD_I) -pat adu dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(ADD_I) -pat sbi dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(SUB_I) -pat sbu dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(SUB_I) -pat and dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(AND_I) -pat ior dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(OR_I) -/* -pat xor dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(EOR_I) - incorrect for eor.l !!! -*/ - -pat dup stl $1==WORD_SIZE && inreg($2)==reg_any -with any_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %1,{dreg_int, regvar($2,reg_any)} - yields {LOCAL, $2} - -pat dup stl $1==4 && inreg($2)==reg_pointer -with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{areg, regvar($2, reg_pointer)} - yields {DLOCAL, $2} - -pat dup LLP sti LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==1 && $5==1 - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{post_inc1, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==1 && $5==1 - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{post_inc1, regvar($2,reg_pointer)} - beq {llabel, $7} - -/* Normally, LLP sti wth word size will be optimized to sil */ -pat dup LLP sti LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==2 && $5==2 - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{post_inc2, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==2 && $5==2 - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{post_inc2, regvar($2,reg_pointer)} - beq {llabel, $7} - -#if WORD_SIZE!=2 -/* m68k2 can't do zne/zeq on 4-byte */ -pat dup LLP sti LLP adp SLP zne $1==4 && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==4 && $5==4 - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{post_inc4, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==4 && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==4 && $5==4 - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{post_inc4, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -pat dup sil LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$3 && $3==$5 && $4==WORD_SIZE - with any_int - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_i %1,{post_inc_int, regvar($2, reg_pointer)} - bne {llabel, $6} - -pat dup sil LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$3 && $3==$5 && $4==WORD_SIZE - with any_int - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_i %1,{post_inc_int, regvar($2, reg_pointer)} - beq {llabel, $6} - -pat sil lil LLP adp SLP zne $1==$2 && $2==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - with any_int - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_i %1,{post_inc_int, regvar($1,reg_pointer)} - bne {llabel, $6} - -pat sil lil LLP adp SLP zeq $1==$2 && $2==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - with any_int - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_i %1,{post_inc_int, regvar($1,reg_pointer)} - beq {llabel, $6} - -pat dup LLP adp SLP LLP sti zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==1 && $4==(0-1) - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{pre_dec1, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP adp SLP LLP sti zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==1 && $4==(0-1) - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{pre_dec1, regvar($2,reg_pointer)} - beq {llabel, $7} - -#if WORD_SIZE!=2 -pat dup LLP adp SLP LLP sti zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==2 && $4==(0-2) - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{pre_dec2, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP adp SLP LLP sti zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==2 && $4==(0-2) - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{pre_dec2, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -#if WORD_SIZE!=2 -pat dup lol adp stl lol sti zne $1==4 && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==4 && $4==(0-4) - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{pre_dec4, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup lol adp stl lol sti zeq $1==4 && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==4 && $4==(0-4) - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{pre_dec4, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -pat LLP ads SLP $1==$3 && $2==4 && inreg($1)==reg_pointer - with data4-sconsts - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l %1, {DLOCAL, $1} - -pat lil dup inc sil $1==$4 && $2==WORD_SIZE && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen add_i {const, 1}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup dec sil $1==$4 && $2==WORD_SIZE && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen sub_i {const, 1}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat LLP LFP dup adp LLP SFP sti $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {offsetted4, regvar($1, reg_pointer), $2} - gen add_l {const4, $4}, {offsetted4, regvar($1, reg_pointer), $2} - killreg %a - yields %1 %a leaving sti $7 - -pat LLP LFP dup adp LLP SFP $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {offsetted4, regvar($1, reg_pointer), $2} - gen add_l {const4, $4}, {offsetted4, regvar($1, reg_pointer), $2} - killreg %a - yields %a - -pat LLP LFP dup adp LLP SFP sti $3==4 && $1==$5 && $2==$6 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {DLOCAL, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat LLP LFP dup adp LLP SFP $3==4 && $1==$5 && $2==$6 - kills allexceptcon - uses AA_REG = {DLOCAL, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b - -pat LEP LFP dup adp LEP SFP sti $3==4 && $1==$5 && $2==$6 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat LEP LFP dup adp LEP SFP $3==4 && $1==$5 && $2==$6 - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b - -#if WORD_SIZE!=2 -pat lil lof dup adp lil stf sti $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat lil lof dup adp lil stf $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b -#endif /* WORD_SIZE==2 */ - -pat LEP loi dup adp LEP sti sti $3==4 && $1==$5 && $2==4 && $6==4 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %1 %b leaving sti $7 - -pat LEP loi dup adp LEP sti $3==4 && $1==$5 && $2==4 && $6==4 - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %b - -#if WORD_SIZE!=2 -pat lil loi dup adp lil sti sti $3==4 && $1==$5 && $2==4 && $6==4 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %1 %b leaving sti $7 - -pat lil loi dup adp lil sti $3==4 && $1==$5 && $2==4 && $6==4 - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %b -#endif - -pat LLP dup adp SLP lae cmp $1==$4 && $2==4 && inreg($1)==reg_pointer && $3 < 0 - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen sub_l {const4,0-$3},{DLOCAL,$1} - yields {DLOCAL,$1} {ext_addr, $5+$3} - leaving cmu 4 - -pat LLP dup adp SLP lae cmp $1==$4 && $2==4 && inreg($1)==reg_pointer && $3 > 0 - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l {const4,$3},{DLOCAL,$1} - yields {DLOCAL,$1} {ext_addr, $5+$3} - leaving cmu 4 - -pat LLP dup adp SLP loi $1==$4 && $2==4 && $3==4 && $5==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc4, regvar($1, reg_pointer)} - -pat LLP dup adp SLP loi $1==$4 && $2==4 && $3==$5 && inreg($1)==reg_pointer - leaving LLP $1 loi $5 LLP $4 adp $3 SLP $4 - -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc1, regvar($1, reg_pointer)} - -/* Normally, LLP loi will be optimized to lil */ -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc2, regvar($1, reg_pointer)} - -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc4, regvar($1, reg_pointer)} - -pat lil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc_int, regvar($1, reg_pointer)} - -pat LLP dup adp SLP sti $1==$4 && $2==4 && $3==$5 && inreg($1)==reg_pointer - leaving LLP $1 sti $5 LLP $4 adp $3 SLP $4 - -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 && - inreg($1)==reg_pointer -with any1 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc1, regvar($1, reg_pointer)} - -/* Normally, LLP sti will ve optimzed into sil */ -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 && - inreg($1)==reg_pointer -with any2 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc2, regvar($1, reg_pointer)} - -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 && - inreg($1)==reg_pointer -with any4 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc4, regvar($1, reg_pointer)} - -pat LLP dup adp SLP sti $1==$4 && $2==4 && $3==WORD_SIZE && $5==WORD_SIZE && - inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc_int, regvar($1, reg_pointer)} - -pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc_int, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec1, regvar($1, reg_pointer)} - -/* Normally, LLP loi will be optimized to lil */ -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-2 && $5==2 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec2, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-4 && $5==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec4, regvar($1, reg_pointer)} - -pat LLP adp SLP lil $1==$3 && $1==$4 && $2==0-WORD_SIZE && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec_int, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 && - inreg($1)==reg_pointer -with any1 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec1, regvar($1, reg_pointer)} - -#if WORD_SIZE!=2 -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 && - inreg($1)==reg_pointer -with any2 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec2, regvar($1, reg_pointer)} -#else -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 && - inreg($1)==reg_pointer -with any4 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec4, regvar($1, reg_pointer)} -#endif - -pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE && - inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec_int, regvar($1, reg_pointer)} - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer && directadd($3) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1} - gen add_l {const4, $3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer && directsub($3) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1} - gen sub_l {const4, 0-$3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3} - gen add_l %b, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && directadd($3) - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1} - gen add_l {const4, $3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && directsub($3) - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1} - gen sub_l {const4, 0-$3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3} - gen add_l %b, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l {const4, $2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen sub_l {const4, 0-$2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses DD_REG4 = {const4, $2} - gen add_l %a, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && directadd($2) - kills all_indir, DLOCAL %bd==$1 - gen add_l {const4, $2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && directsub($2) - kills all_indir, DLOCAL %bd==$1 - gen sub_l {const4, 0-$2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 - kills all_indir, DLOCAL %bd==$1 - uses DD_REG4 = {const4, $2} - gen add_l %a, {DLOCAL, $1} - -#if WORD_SIZE!=2 -pat lil dup adp sil sti $1==$4 && $2==4 && inreg($1)==reg_pointer && $5<=4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)} - gen add_l {const, $3}, {indirect4, regvar($1, reg_pointer)} - killreg %a - yields %1 %a leaving sti $5 - -pat lil dup adp sil $1==$4 && $2==4 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)} - gen add_l {const, $3}, {indirect4, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup adp sil $1==$4 && $2==4 - kills allexceptcon - uses AA_REG, AA_REG = {LOCAL, $1} - gen move {indirect4, %b}, %a - add_l {const, $3}, {indirect4, %b} - killreg %a - yields %a - -pat lil adp sil $1==$3 && inreg($1)==reg_pointer - kills allexceptcon - gen add_l {const, $2}, {indirect4, regvar($1, reg_pointer)} - -pat lil adp sil $1==$3 && inreg($1)!=reg_any - kills allexceptcon -#if TBL68020 /* WORD_SIZE==4 */ - gen add_l {const, $2}, {ILOCAL,$1} -#else - uses AA_REG = {LOCAL, $1} - gen add_l {const, $2}, {indirect4, %a} -#endif -#endif /* WORD_SIZE==2 */ - -pat LEP dup adp SEP $1==$4 && $2==4 - kills posextern - uses AA_REG = {absolute4, $1} - gen add_l {const4, $3}, {absolute4, $1} - killreg %a - yields %a - -pat LEP adp SEP $1==$3 - kills posextern - gen add_l {const4, $2}, {absolute4, $1} - -pat loc and $1==255 && $2==WORD_SIZE -#if WORD_SIZE==2 - with exact absolute_int yields {absolute1,%1.bd+1} - with exact offsetted_int yields {offsetted1,%1.reg,%1.bd+1} - with exact LOCAL yields {offsetted1,lb,%1.bd+1} -#else - with exact absolute_int yields {absolute1,%1.bd+3} - with exact offsetted_int yields {offsetted1,%1.reg,%1.bd+3} - with exact LOCAL yields {offsetted1,lb,%1.bd+3} -#endif - with yields {const, $1} leaving and WORD_SIZE - -/************************************************ - * Group 1: load instructions * - ************************************************/ - -pat loc $1==0 yields {zero_const, $1} - -pat loc small($1) yields {small_const, $1} - -pat loc in_1($1) yields {bconst, $1} - -pat loc yields {const, $1} - -#if WORD_SIZE!=2 -pat ldc leaving loc 18 trp -#else -pat ldc highw($1)==0 && loww($1)==0 yields {zero_const4, 0} - -pat ldc highw($1)==0 && small(loww($1)) yields {small_const4, loww($1)} - -pat ldc highw($1)==0 && in_1(loww($1)) yields {bconst4, loww($1)} - -pat ldc yields {const4, $1} -#endif - -pat LLP inreg($1)==reg_pointer - kills pre_post %reg==regvar($1, reg_pointer) - yields {DLOCAL, $1} - -pat lol yields {LOCAL, $1} - -#if WORD_SIZE!=2 -pat ldl leaving lol $1+4 lol $1 -#else -pat ldl yields {DLOCAL, $1} -#endif - -pat loe yields {absolute_int, $1} - -/* replace ste loe by dup ste, but not if followed by a test ... */ -proc steloezxx example ste loe zne -with any_int-sconsts - kills posextern - gen move_i %1, {absolute_int, $1} - bxx* {llabel, $3} -with exact STACK - kills posextern - gen move_i {post_inc_int, sp}, {absolute_int, $1} - bxx* {llabel, $3} - -pat ste loe zlt $1==$2 call steloezxx("blt") -pat ste loe zle $1==$2 call steloezxx("ble") -pat ste loe zeq $1==$2 call steloezxx("beq") -pat ste loe zne $1==$2 call steloezxx("bne") -pat ste loe zge $1==$2 call steloezxx("bge") -pat ste loe zgt $1==$2 call steloezxx("bgt") - -pat ste loe $1==$2 leaving dup WORD_SIZE ste $1 - -pat lil inreg($1)==reg_pointer - kills pre_post %reg==regvar($1, reg_pointer) - yields {indirect_int, regvar($1, reg_pointer)} -#if WORD_SIZE==4 -pat lil inreg($1)==reg_any - uses AA_REG = {DLOCAL, $1} - yields {indirect_int, %a} -#endif - -pat lil -#if TBL68020 - yields {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - yields {indirect_int, %a} -#endif - - /* When using the 'offsetted' intructions regAregXcon cannot be used - * for the m68k[24]; there is no way of knowing about the size of - * %1.bd+$1, because expressions are not allowed in stack patterns, and - * this may lead to outputting too large displacements. With regAcon - * the chance that this will happen is very slim, because it can - * have displacements of 16 bits. Besides, leaving out regAcon here - * would make it very hard to handle this instruction efficiently. - */ -pat lof -with A_REG yields {offsetted_int, %1, $1} -with exact local_addr yields {LOCAL, %1.bd+$1} -with exact ext_addr yields {absolute_int, %1.bd+$1} -#ifndef TBL68020 -with regAcon yields {offsetted_int, %1.reg, %1.bd+$1} -#else /* TBL68020 */ -with exact regAcon yields {offsetted_int, %1.reg, %1.bd+$1} -with exact regAregXcon yields {index_off_int, %1.reg, %1.xreg, %1.sc, %1.bd+$1} -#ifdef FANCY_MODES -with exact offsetted4 yields {OFF_off_int, %1.reg, %1.bd, $1} -with exact indirect yields {OFF_off_int, %1.reg, 0, $1} -with exact DLOCAL yields {OFF_off_int, lb, %1.bd, $1} -with exact off_con yields {OFF_off_int, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 yields {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con yields {INDOFF_off_int, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon yields {OFF_indoff_int, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 yields {ABS_off_int, %1.bd, $1} -with exact abs_con yields {ABS_off_int, %1.bd, %1.od+$1} -with exact abs_regXcon yields {ABS_indoff_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 yields {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con yields {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX yields {abs_index_int, %1.sc, %1.xreg, %1.bd+$1} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat lal yields {local_addr, $1} - -pat lae yields {ext_addr, $1} - -pat lxl $1==0 yields lb - -pat lxl $1==1 yields {DLOCAL, SL} - -pat lxl $1==2 -#if TBL68020 && FANCY_MODES - yields {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - yields {offsetted4, %a, SL} -#endif - -pat lxl $1==3 -#if TBL68020 && FANCY_MODES - uses AA_REG = {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - gen move_l {offsetted4, %a, SL}, %a -#endif - yields {offsetted4, %a, SL} - -pat lxl $1>3 - uses AA_REG = {DLOCAL, SL}, - DD_REG4 = {const, $1-2} - gen 1: - move_l {offsetted4, %a, SL} ,%a - dbf %b, {slabel, 1b} - yields %a - -pat lxa $1==0 yields {local_addr, SL} - -pat lxa $1==1 -#if TBL68020 && FANCY_MODES - yields {off_con, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - yields {regAcon, %a, SL} -#endif - -pat lxa $1==2 -#if TBL68020 && FANCY_MODES - uses AA_REG = {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - gen move_l {offsetted4, %a, SL}, %a -#endif - yields {regAcon, %a, SL} - -pat lxa $1>2 - uses AA_REG = {DLOCAL, SL}, - DD_REG4 = {const, $1-2} - gen 1: - move_l {offsetted4, %a, SL} ,%a - dbf %b, {slabel, 1b} - yields {regAcon, %a, SL} - -pat loi $1==1 -with A_REG yields {indirect1, %1} -with exact local_addr yields {offsetted1, lb, %1.bd} -with exact ext_addr yields {absolute1, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted1, %1.reg, %1.bd} -with regAregXcon yields {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted1, %1.reg, %1.bd} -with exact regAregXcon yields {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off1, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off1, %1.reg, %1.bd, 0} -with exact LOCAL yields {OFF_off1, lb, %1.bd, 0} -with exact off_con yields {OFF_off1, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off1, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff1, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off1, %1.bd, 0} -with exact abs_con yields {ABS_off1, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off1, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index1, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat loi $1==2 -with A_REG yields {indirect2, %1} -#if WORD_SIZE!=2 -with exact local_addr yields {offsetted2, lb, %1.bd} -#else -with exact local_addr yields {LOCAL, %1.bd} -#endif -with exact ext_addr yields {absolute2, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted2, %1.reg, %1.bd} -with regAregXcon yields {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted2, %1.reg, %1.bd} -with exact regAregXcon yields {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==2 -with exact DLOCAL yields {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off2, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off2, %1.reg, %1.bd, 0} -with exact LOCAL yields {OFF_off2, lb, %1.bd, 0} -with exact off_con yields {OFF_off2, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off2, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff2, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off2, %1.bd, 0} -with exact abs_con yields {ABS_off2, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off2, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index2, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat loi $1==4 -with A_REG yields {indirect4, %1} -with exact local_addr yields {DLOCAL, %1.bd} -with exact ext_addr yields {absolute4, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted4, %1.reg, %1.bd} -with regAregXcon yields {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted4, %1.reg, %1.bd} -with exact regAregXcon yields {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==4 -with exact LOCAL yields {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off4, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off4, %1.reg, %1.bd, 0} -with exact off_con yields {OFF_off4, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off4, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff4, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off4, %1.bd, 0} -with exact abs_con yields {ABS_off4, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off4, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index4, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat loi $1==6 -with AA_REG - yields {offsetted2, %1, 4} {indirect4, %1} -with exact local_addr - yields {offsetted2, lb, %1.bd+4} {offsetted4, lb, %1.bd} -with exact ext_addr - yields {absolute2, %1.bd + 4} {absolute4, %1.bd} -#endif - -pat loi $1==8 -#if WORD_SIZE!=2 - leaving ldf 0 -#else -with AA_REG - yields {offsetted4, %1, 4} {indirect4, %1} -with exact local_addr - yields {offsetted4, lb, %1.bd+4} {offsetted4, lb, %1.bd} -with exact ext_addr - yields {absolute4, %1.bd + 4} {absolute4, %1.bd} -#endif - -#if WORD_SIZE==4 -pat loi $1==3*WORD_SIZE -with AA_REG STACK - kills ALL - uses DD_REG4={const,$1} - gen add_l %a, %1 - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - -pat loi $1==4*WORD_SIZE -with AA_REG STACK - kills ALL - uses DD_REG4={const4,$1} - gen add_l %a, %1 - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} -#endif - -pat loi $1>4*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG STACK - kills ALL - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen add_l {const4, $1}, %1 - 1: - move_i {pre_dec_int, %1}, {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat loi -with STACK - kills ALL - gen move_i {const,$1},{pre_dec_int, sp} - jsr {absolute4, ".los"} - -pat los $1==WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".los"} -#if WORD_SIZE==2 -pat los $1==4 -with STACK - kills ALL - gen jsr {absolute4, ".los4"} -#endif - -pat lde -#if WORD_SIZE==2 - yields {absolute4, $1} -#else - yields {absolute4, $1+4} - {absolute4, $1} -#endif - -pat ldf -#if WORD_SIZE==2 -with A_REG yields {offsetted4, %1, $1} -with exact local_addr yields {DLOCAL, %1.bd+$1} -with regAcon yields {offsetted4, %1.reg, %1.bd+$1} -#else -with A_REG yields {offsetted4, %1, $1+4} - {offsetted4, %1, $1} -with exact local_addr yields {LOCAL, %1.bd+$1+4} - {LOCAL, %1.bd+$1} -with regAcon yields {offsetted4, %1.reg, %1.bd+$1+4} - {offsetted4, %1.reg, %1.bd+$1} -#endif - -pat lpi yields {ext_addr, $1} - -/************************************************ - * Group 2: store instructions * - ************************************************/ - -pat stl inreg($1)==reg_any -with exact memory1-consts - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - move_b %1, {dreg1, regvar($1,reg_any)} -#if WORD_SIZE==2 -with any2 - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move %1, {LOCAL, $1} -#else -with exact memory2-consts - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - move_w %1, {dreg2, regvar($1,reg_any)} -with store4 - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move %1, {LOCAL, $1} -#endif -with exact STACK - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move_i {post_inc_int, sp}, {LOCAL, $1} - -pat SLP inreg($1)==reg_pointer -with any4 -#if WORD_SIZE!=2 - -sconsts4 -#endif - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move %1, {areg, regvar($1, reg_pointer)} -with exact ext_addr - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_l %1, {areg, regvar($1, reg_pointer)} -with address-ext_addr - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen lea %1, {areg, regvar($1, reg_pointer)} -with exact STACK - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_l {post_inc4, sp}, {areg, regvar($1, reg_pointer)} - -pat stl -with store_int-sconsts - kills all_indir, LOCAL %bd==$1 - gen move %1, {LOCAL, $1} -with exact STACK - kills all_indir, LOCAL %bd==$1 - gen move_i {post_inc_int,sp}, {LOCAL, $1} - -pat ste -with store_int-sconsts - kills posextern - gen move %1, {absolute_int, $1} -with exact STACK - kills posextern - gen move_i {post_inc_int, sp}, {absolute_int, $1} - -pat sil inreg($1)==reg_pointer -with store_int-sconsts - kills allexceptcon - gen move %1, {indirect_int, regvar($1, reg_pointer)} -with exact STACK - kills allexceptcon - gen move_i {post_inc_int, sp}, {indirect_int, regvar($1, reg_pointer)} - -#if WORD_SIZE==4 -pat sil inreg($1)==reg_any -with store_int-sconsts - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move %1, {indirect_int, %a} -with exact STACK - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move_i {post_inc_int, sp}, {indirect_int, %a} -#endif - -pat sil -#if TBL68020 -with store_int-sconsts - kills allexceptcon - gen move %1, {ILOCAL, $1} -with exact STACK - kills allexceptcon - gen move_i {post_inc_int, sp}, {ILOCAL, $1} -#else -with store_int-sconsts - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move %1, {indirect_int, %a} -with exact STACK - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move_i {post_inc_int, sp}, {indirect_int, %a} -#endif - -pat stf -with A_REG store_int-sconsts - kills allexceptcon - gen move %2, {offsetted_int, %1, $1} -with exact any4 STACK - kills allexceptcon - uses AA_REG = %1 - gen move_i {post_inc_int, sp}, {offsetted_int, %a, $1} -with exact STACK - kills allexceptcon - uses AA_REG - gen move_l {post_inc4, sp}, %a - move_i {post_inc_int, sp}, {offsetted_int, %a, $1} -with exact local_addr store_int - kills allexceptcon - gen move %2, {LOCAL, %1.bd+$1} -with exact ext_addr store_int - kills allexceptcon - gen move %2, {absolute_int, %1.bd+$1} -#if TBL68000 -#if WORD_SIZE==4 -with regAcon store_int - kills allexceptcon - gen move %2, {offsetted_int, %1.reg, %1.bd+$1} -#endif -#else /* TBL68020 */ -with exact regAcon store_int - kills allexceptcon - gen move %2, {offsetted_int, %1.reg, %1.bd+$1} -with exact regAregXcon store_int - kills allexceptcon - gen move %2, {index_off_int, %1.reg, %1.xreg, %1.sc, %1.bd+$1} -#ifdef FANCY_MODES -with exact indirect4 store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, 0, $1} -with exact offsetted4 store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, %1.bd, $1} -with exact DLOCAL store_int - kills allexceptcon - gen move %2, {OFF_off_int, lb, %1.bd, $1} -with exact off_con store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 store_int - kills allexceptcon - gen move %2, {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con store_int - kills allexceptcon - gen move %2, {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon store_int - kills allexceptcon - gen move %2, {OFF_indoff_int, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 store_int - kills allexceptcon - gen move %2, {ABS_off_int, %1.bd, $1} -with exact abs_con store_int - kills allexceptcon - gen move %2, {ABS_off_int, %1.bd, %1.od+$1} -with exact abs_regXcon store_int - kills allexceptcon - gen move %2, {ABS_indoff_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 store_int - kills allexceptcon - gen move %2, {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con store_int - kills allexceptcon - gen move %2, {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX store_int - kills allexceptcon - gen move %2, {abs_index_int, %1.sc, %1.xreg, %1.bd+$1} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==1 -with A_REG any1 - kills allexceptcon - gen move %2, {indirect1, %1} -with local_addr any1 - kills allexceptcon - gen move %2, {offsetted1, lb, %1.bd} -with exact ext_addr any1 - kills allexceptcon - gen move %2, {absolute1, %1.bd} -#ifndef TBL68020 -with regAcon any1 - kills allexceptcon - gen move %2, {offsetted1, %1.reg, %1.bd} -with regAregXcon any1 - kills allexceptcon - gen move %2, {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon any1 - kills allexceptcon - gen move %2, {offsetted1, %1.reg, %1.bd} -with exact regAregXcon any1 - kills allexceptcon - gen move %2, {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#ifdef FANCY_MODES -with exact indirect4 any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, 0, 0} -with exact offsetted4 any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, %1.bd, 0} -with exact LOCAL any1 - kills allexceptcon - gen move %2, {OFF_off1, lb, %1.bd, 0} -with exact off_con any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, %1.bd, %1.od} -with exact index_off4 any1 - kills allexceptcon - gen move %2, {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con any1 - kills allexceptcon - gen move %2, {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon any1 - kills allexceptcon - gen move %2, {OFF_indoff1, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 any1 - kills allexceptcon - gen move %2, {ABS_off1, %1.bd, 0} -with exact abs_con any1 - kills allexceptcon - gen move %2, {ABS_off1, %1.bd, %1.od} -with exact abs_regXcon any1 - kills allexceptcon - gen move %2, {ABS_indoff1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 any1 - kills allexceptcon - gen move %2, {ABSIND_off1, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con any1 - kills allexceptcon - gen move %2, {ABSIND_off1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX any1 - kills allexceptcon - gen move %2, {abs_index1, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==2 -with A_REG any2 - kills allexceptcon - gen move %2, {indirect2, %1} -with local_addr any2 - kills allexceptcon - gen move %2, {offsetted2, lb, %1.bd} -with exact ext_addr any2 - kills allexceptcon - gen move %2, {absolute2, %1.bd} -#ifndef TBL68020 -with regAcon any2 - kills allexceptcon - gen move %2, {offsetted2, %1.reg, %1.bd} -with regAregXcon any2 - kills allexceptcon - gen move %2, {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon any2 - kills allexceptcon - gen move %2, {offsetted2, %1.reg, %1.bd} -with exact regAregXcon any2 - kills allexceptcon - gen move %2, {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==2 -with exact DLOCAL any2 - kills allexceptcon - gen move %2, {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, 0, 0} -with exact offsetted4 any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, %1.bd, 0} -with exact LOCAL any2 - kills allexceptcon - gen move %2, {OFF_off2, lb, %1.bd, 0} -with exact off_con any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, %1.bd, %1.od} -with exact index_off4 any2 - kills allexceptcon - gen move %2, {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con any2 - kills allexceptcon - gen move %2, {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon any2 - kills allexceptcon - gen move %2, {OFF_indoff2, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 any2 - kills allexceptcon - gen move %2, {ABS_off2, %1.bd, 0} -with exact abs_con any2 - kills allexceptcon - gen move %2, {ABS_off2, %1.bd, %1.od} -with exact abs_regXcon any2 - kills allexceptcon - gen move %2, {ABS_indoff2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 any2 - kills allexceptcon - gen move %2, {ABSIND_off2, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con any2 - kills allexceptcon - gen move %2, {ABSIND_off2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX any2 - kills allexceptcon - gen move %2, {abs_index2, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==4 -with A_REG store4-sconsts4 - kills allexceptcon - gen move %2, {indirect4, %1} -with exact any4 STACK - kills allexceptcon - uses AA_REG = %1 - gen move_l {post_inc4, sp}, {indirect4, %a} -with exact STACK - kills allexceptcon - uses AA_REG - gen move_l {post_inc4, sp}, %a - move_l {post_inc4, sp}, {indirect4, %a} -with exact local_addr store4 - kills allexceptcon - gen move %2, {DLOCAL, %1.bd} -with exact ext_addr store4 - kills allexceptcon - gen move %2, {absolute4, %1.bd} -#ifndef TBL68020 -with regAcon store4-sconsts4 - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd} -with regAregXcon store4-sconsts4 - kills allexceptcon - gen move %2, {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon store4 - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd} -with exact regAregXcon store4 - kills allexceptcon - gen move %2, {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==4 -with exact LOCAL store4 - kills allexceptcon - gen move %2, {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, 0, 0} -with exact offsetted4 store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, %1.bd, 0} -with exact off_con store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, %1.bd, %1.od} -with exact index_off4 store4 - kills allexceptcon - gen move %2, {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con store4 - kills allexceptcon - gen move %2, {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon store4 - kills allexceptcon - gen move %2, {OFF_indoff4, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 store4 - kills allexceptcon - gen move %2, {ABS_off4, %1.bd, 0} -with exact abs_con store4 - kills allexceptcon - gen move %2, {ABS_off4, %1.bd, %1.od} -with exact abs_regXcon store4 - kills allexceptcon - gen move %2, {ABS_indoff4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 store4 - kills allexceptcon - gen move %2, {ABSIND_off4, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con store4 - kills allexceptcon - gen move %2, {ABSIND_off4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX store4 - kills allexceptcon - gen move %2, {abs_index4, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat sti $1==6 -with A_REG any4 any2 - kills ALL - gen move %2, {indirect4, %1} - move %3, {offsetted2, %1, 4} -with AA_REG any4 any2 - kills ALL - gen move %2, {post_inc4, %1} - move %3, {post_inc2, %1} -with exact A_REG STACK - kills ALL - gen move_l {post_inc4, sp}, {indirect4, %1} - move_w {post_inc2, sp}, {offsetted2, %1, 4} -with exact AA_REG STACK - kills ALL - gen move_l {post_inc4, sp}, {post_inc4, %1} - move_w {post_inc2, sp}, {post_inc2, %1} -#endif - -pat sti $1==8 -#if WORD_SIZE!=2 - leaving sdf 0 -#else -with AA_REG any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{indirect4, %1} - move_l %3,{offsetted4, %1, 4} -with exact local_addr any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{offsetted4, lb, %1.bd} - move_l %3,{offsetted4, lb, %1.bd+4} -with exact ext_addr any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{absolute4, %1.bd} - move_l %3,{absolute4, %1.bd+4} -#endif - - -#if WORD_SIZE==4 -pat sti $1==3*WORD_SIZE - with AA_REG STACK - kills ALL - gen move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - -pat sti $1==4*WORD_SIZE - with AA_REG STACK - kills ALL - gen move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} -#endif - -pat sti $1>4*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG STACK - kills ALL - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - move_i {post_inc_int, sp}, {post_inc_int, %1} - dbf %a, {slabel, 1b} - -pat sti -with STACK - kills ALL - gen move_i {const, $1}, {pre_dec_int, sp} - jsr {absolute4, ".sts"} - -pat sts $1==WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".sts"} -#if WORD_SIZE==2 -pat sts $1==4 -with STACK - kills ALL - gen jsr {absolute4, ".sts4"} -#endif - -#if WORD_SIZE==2 -pat sdl -with store4-sconsts4 - kills all_indir, DLOCAL %bd==$1 - gen move %1, {DLOCAL, $1} -with exact STACK - kills all_indir, DLOCAL %bd==$1 - gen move_l {post_inc4,sp}, {DLOCAL, $1} -#else -pat sdl -with any4-sconsts any4-sconsts - kills all_indir, LOCAL %bd==$1 - gen move %1, {LOCAL, $1} - move %2, {LOCAL, $1+4} -#if TBL68881 -with exact FD_REG - kills all_indir, LOCAL %bd==$1 - gen fmove_d %1, {LOCAL, $1} -#endif -with exact STACK - kills all_indir, LOCAL %bd==$1 - gen move_l {post_inc4, sp}, {LOCAL,$1} - move_l {post_inc4, sp}, {LOCAL,$1+4} -#endif /* WORD_SIZE==2 */ - -pat sde -#if WORD_SIZE==2 -with any4-sconsts4 - kills posextern - gen move_l %1, {absolute4, $1} -with exact STACK - kills posextern - gen move_l {post_inc4, sp}, {absolute4, $1} -#else -with any4-sconsts any4-sconsts - kills posextern - gen move %1, {absolute4, $1} - move %2, {absolute4, $1+4} -#if TBL68881 -with exact FD_REG - kills posextern - gen fmove_d %1, {absolute4, $1} -#endif -with exact STACK - kills posextern - gen move_l {post_inc4, sp}, {absolute4,$1} - move_l {post_inc4, sp}, {absolute4,$1+4} -#endif - -pat sdf -#if WORD_SIZE==2 -with A_REG any4-sconsts4 - kills allexceptcon - gen move_l %2, {offsetted4, %1, $1} -with exact A_REG STACK - kills allexceptcon - gen move_l {post_inc4, sp}, {offsetted4, %1, $1} -#else -with A_REG any4-sconsts any4-sconsts - kills allexceptcon - gen move %2, {offsetted4, %1, $1} - move %3, {offsetted4, %1, $1+4} -with exact local_addr any4 any4 - kills allexceptcon - gen move %2, {LOCAL, %1.bd+$1} - move %3, {LOCAL, %1.bd+$1+4} -with regAcon any4-sconsts any4-sconsts - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd+$1} - move %3, {offsetted4, %1.reg, %1.bd+$1+4} -#endif - - - -/************************************************ - * Group 3: integer arithmetic. * - ************************************************/ - -#if WORD_SIZE==2 -pat adi $1==2 -with any2-bconst DD_REG - gen add_w %1, %2 yields %2 -with DD_REG any2-DD_REG-bconst - gen add_w %2, %1 yields %1 -with exact any2 STACK - uses reusing %1,DD_REG=%1 - gen add_w {post_inc2, sp}, %a - yields %a -#endif - -pat adi $1==4 -with any4-bconst4 DD_REG4 - gen add_l %1, %2 yields %2 -with DD_REG4 any4-DD_REG4-bconst4 - gen add_l %2, %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen add_l {post_inc4, sp}, %a - yields %a - -#if WORD_SIZE==2 -pat sbi $1==2 -with any2-bconst DD_REG - gen sub_w %1, %2 yields %2 -with DD_REG any2-DD_REG-bconst - gen sub_w %2, %1 - neg_w %1 yields %1 -with exact any2 STACK - uses reusing %1,DD_REG=%1 - gen sub_w {post_inc2, sp}, %a - neg_w %a yields %a -#endif - -pat sbi $1==4 -with any4-bconst4 DD_REG4 - gen sub_l %1, %2 yields %2 -with DD_REG4 any4-DD_REG4-bconst4 - gen sub_l %2, %1 - neg_l %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen sub_l {post_inc4, sp}, %a - neg_l %a yields %a -with any4-bconst4 AA_REG - gen sub_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat loc loc cii ldc mli $1==2 && $2==4 && highw($4)==0 && loww($4)>0 && $5==4 -with any2-pre_post - uses reusing %1, DD_REG4 - gen move %1, %a.1 - muls_w {const, loww($4)}, %a.1 - yields %a - -pat mli $1==2 -with any2-pre_post any2-pre_post - uses reusing %2,DD_REG = %2 - gen muls_w %1, %a yields %a -#endif - -pat mli $1==4 -#ifdef TBL68020 -with data4 DD_REG4 - gen muls_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".mli"} - yields dl1 -#endif - -#if WORD_SIZE==2 -pat dvi $1==2 -with data2-sconsts DD_REG - gen ext_l %2 - divs_w %1, %2 - yields %2 -#endif - -pat dvi $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen divs_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvi"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat rmi $1==2 -with data2-sconsts DD_REG - gen ext_l %2 - divs_w %1, %2 - swap %2 - killreg %2 - yields %2 -#endif - -pat rmi $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - uses DD_REG4 - gen divsl_l %1, {DREG_pair, %a, %2} - killreg %2 - /* !!!! contents of %2 have changed: make this known to cg */ - yields %a -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvi"} - yields dl2 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat ngi $1==2 -with DD_REG - gen neg_w %1 yields %1 -#endif - -pat ngi $1==4 -with DD_REG4 - gen neg_l %1 yields %1 - -#if WORD_SIZE==2 -pat sli $1==2 -with shconreg DD_REG - gen asl_w %1, %2 yields %2 -#endif - -pat sli $1==4 -with shconreg DD_REG4 - gen asl_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat sri $1==2 -with shconreg DD_REG - gen asr_w %1, %2 yields %2 -#endif - -pat sri $1==4 -with shconreg DD_REG4 - gen asr_l %1, %2 yields %2 - -/************************************************ - * Group 4: unsigned arithmetic. * - ************************************************/ - -pat adu leaving adi $1 - -pat sbu leaving sbi $1 - -#if WORD_SIZE==2 -pat mlu $1==2 -with any2-pre_post any2-pre_post - uses reusing %2,DD_REG = %2 - gen mulu_w %1, %a yields %a -#endif - -pat mlu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen mulu_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".mlu"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat dvu $1==2 -with data2-sconsts data2 - uses DD_REG4 = {zero_const4,0} - gen move %2,%a.1 - divu_w %1, %a.1 yields %a.1 -#endif - -pat dvu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen divu_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvu"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat rmu $1==2 -with data2-sconsts data2 - uses DD_REG4 = {zero_const4, 0} - gen move %2,%a.1 - divu_w %1, %a.1 - swap %a.1 - killreg %a - yields %a.1 -#endif - -pat rmu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - uses DD_REG4 - gen divul_l %1, {DREG_pair, %a, %2} - killreg %2 - /* !!!! contents of %2 have changed: make this known to cg */ - yields %a -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvu"} - yields dl2 -#endif /* TBL68020 */ - -pat slu leaving sli $1 - -#if WORD_SIZE==2 -pat sru $1==2 -with shconreg DD_REG - gen lsr_w %1, %2 yields %2 -#endif - -pat sru $1==4 -with shconreg DD_REG4 - gen lsr_l %1, %2 yields %2 - -/************************************************ - * Group 5: floating point arithmetic * - ************************************************/ - -/* Floating point stuff - * Arithmetic instructions - */ - -#if TBL68881 -pat adf stl $1==4 - with FS_REG STACK - gen fadd_s {post_inc4,sp},%1 yields %1 leaving stl $2 -pat adf sdl $1==8 - with FD_REG STACK - gen fadd_d {post_inc4,sp},%1 yields %1 leaving sdl $2 -pat sbf stl $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 yields %2 leaving stl $2 -pat sbf sdl $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 yields %2 leaving sdl $2 -pat mlf stl $1==4 - with FS_REG STACK - gen fmul_s {post_inc4,sp},%1 yields %1 leaving stl $2 -pat mlf sdl $1==8 - with FD_REG STACK - gen fmul_d {post_inc4,sp},%1 yields %1 leaving sdl $2 -pat dvf stl $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 yields %2 leaving stl $2 -pat dvf sdl $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 yields %2 leaving sdl $2 -pat ngf stl $1==4 - with FS_REG STACK - gen fneg %1 yields %1 leaving stl $2 -pat ngf sdl $1==8 - with FD_REG STACK - gen fneg %1 yields %1 leaving sdl $2 - -pat adf ste $1==4 - with FS_REG STACK - gen fadd_s {post_inc4,sp},%1 yields %1 leaving ste $2 -pat adf sde $1==8 - with FD_REG STACK - gen fadd_d {post_inc4,sp},%1 yields %1 leaving sde $2 -pat sbf ste $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 yields %2 leaving ste $2 -pat sbf sde $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 yields %2 leaving sde $2 -pat mlf ste $1==4 - with FS_REG STACK - gen fmul_s {post_inc4,sp},%1 yields %1 leaving ste $2 -pat mlf sde $1==8 - with FD_REG STACK - gen fmul_d {post_inc4,sp},%1 yields %1 leaving sde $2 -pat dvf ste $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 yields %2 leaving ste $2 -pat dvf sde $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 yields %2 leaving sde $2 -pat ngf ste $1==4 - with FS_REG STACK - gen fneg %1 yields %1 leaving ste $2 -pat ngf sde $1==8 - with FD_REG STACK - gen fneg %1 yields %1 leaving sde $2 - -pat adf $1==4 - with FS_REG STACK - gen fadd_s {indirect4,sp},%1 - fmove_s %1,{indirect4,sp} -pat adf $1==8 - with FD_REG STACK - gen fadd_d {indirect4,sp},%1 - fmove_d %1,{indirect4,sp} -pat sbf $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 - fmove_s %2,{pre_dec4,sp} -pat sbf $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 - fmove_d %2,{pre_dec4,sp} -pat mlf $1==4 - with FS_REG STACK - gen fmul_s {indirect4,sp},%1 - fmove_s %1,{indirect4,sp} -pat mlf $1==8 - with FD_REG STACK - gen fmul_d {indirect4,sp},%1 - fmove_d %1,{indirect4,sp} -pat dvf $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 - fmove_s %2,{pre_dec4,sp} -pat dvf $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 - fmove_d %2,{pre_dec4,sp} -pat ngf $1==4 - with FS_REG STACK - gen fneg %1 - fmove_s %1,{pre_dec4,sp} -pat ngf $1==8 - with FD_REG STACK - gen fneg %1 - fmove_d %1,{pre_dec4,sp} -pat fif $1==4 - with FS_REG FS_REG STACK - gen fmul %1,%2 - fintrz %2,%1 - fsub %1,%2 - fmove_s %2,{pre_dec4,sp} - fmove_s %1,{pre_dec4,sp} -pat fif $1==8 - with FD_REG FD_REG STACK - gen fmul %1,%2 - fintrz %2,%1 - fsub %1,%2 - fmove_d %2,{pre_dec4,sp} - fmove_d %1,{pre_dec4,sp} -#else -pat adf $1==4 leaving cal ".adf4" asp 4 -pat adf $1==8 leaving cal ".adf8" asp 8 -pat sbf $1==4 leaving cal ".sbf4" asp 4 -pat sbf $1==8 leaving cal ".sbf8" asp 8 -pat mlf $1==4 leaving cal ".mlf4" asp 4 -pat mlf $1==8 leaving cal ".mlf8" asp 8 -pat dvf $1==4 leaving cal ".dvf4" asp 4 -pat dvf $1==8 leaving cal ".dvf8" asp 8 -pat ngf $1==4 leaving cal ".ngf4" -pat ngf $1==8 leaving cal ".ngf8" -pat fif $1==4 leaving lor 1 cal ".fif4" asp 4 -pat fif $1==8 leaving lor 1 cal ".fif8" asp 4 -#endif -#if WORD_SIZE==2 -pat fef $1==4 leaving lor 1 adp 0-2 cal ".fef4" asp 2 -pat fef $1==8 leaving lor 1 adp 0-2 cal ".fef8" asp 2 -#else -pat fef $1==4 leaving lor 1 adp 0-4 cal ".fef4" -pat fef $1==8 leaving lor 1 adp 0-4 cal ".fef8" -#endif - -/************************************************ - * Group 6: pointer arithmetic * - ************************************************/ - -pat adp $1==0 /* skip; array instructions might 'leave' this */ - -pat adp -with A_REG yields {t_regAcon, %1, $1} -with exact local_addr yields {local_addr, %1.bd+$1} -with exact ext_addr yields {ext_addr, %1.bd+$1} -with exact regAcon + t_regAcon - yields {t_regAcon, %1.reg, %1.bd+$1} -with exact regAregXcon + t_regAregXcon - yields {t_regAregXcon,%1.reg, %1.xreg, %1.sc, %1.bd+$1} -#if TBL68020 && FANCY_MODES -with exact indirect4 yields {off_con, %1.reg, 0, $1} -with exact LOCAL yields {off_con, lb, %1.bd, $1} -with exact offsetted4 yields {off_con, %1.reg, %1.bd, $1} -with exact off_con yields {off_con, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 yields {indoff_con, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con yields {indoff_con, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon yields {off_regXcon, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 yields {abs_con, %1.bd, $1} -with exact abs_con yields {abs_con, %1.bd, %1.od+$1} -with exact abs_regXcon yields {abs_regXcon, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 yields {absind_con, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con yields {absind_con, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX yields {ext_regX, %1.sc, %1.xreg, %1.bd+$1} -#endif - -pat ads cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving cmu 4 -#endif - -#if WORD_SIZE!=2 -pat ads bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving bne $2 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving bne $2 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving bne $2 -#endif - -pat ads beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving beq $2 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving beq $2 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving beq $2 -#endif - -pat ads LEP bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving loe $2 bne $3 -#endif - -pat ads LEP beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving loe $2 beq $3 -#endif - -pat ads LEP cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving LEP $2 cmu 4 -#endif - -pat ads lae bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 bne $3 -#endif - -pat ads lae beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 beq $3 -#endif -#endif /* WORD_SIZE==2 */ - -pat ads lae cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 cmu 4 -#endif - -#if WORD_SIZE!=2 -pat ads lal bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 bne $3 -#endif - -pat ads lal beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 beq $3 -#endif - -pat ads lal cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 cmu 4 -#endif - -pat ads LLP bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 bne $3 -#endif - -pat ads LLP beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 beq $3 -#endif -#endif /* WORD_SIZE==2 */ - -pat ads LLP cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 cmu 4 -#endif - -#if WORD_SIZE==2 -pat ads $1==2 - leaving loc 2 loc 4 cii ads 4 -#endif - -pat ads $1==4 -with D_REG4 A_REG yields {regAregXcon, %2, %1, 1, 0} -with D_REG4 regAcon + t_regAcon - yields {t_regAregXcon, %2.reg, %1, 1, %2.bd} -with D_REG4 local_addr yields {t_regAregXcon, lb, %1, 1, %2.bd} -with any4 AA_REG - gen add_l %1, %2 yields %2 - -#ifdef TBL68020 - -with D_REG4 yields {regX, 1, %1} - leaving ads 4 -with regX A_REG yields {regAregXcon, %2, %1.xreg, %1.sc, 0} -with exact regX regAcon yields {regAregXcon, %2.reg, %1.xreg, %1.sc, %2.bd} -with exact regX local_addr - yields {regAregXcon, lb, %1.xreg, %1.sc, %2.bd} -#ifdef FANCY_MODES -with exact regX indirect4 - yields {off_regXcon, %2.reg, %1.xreg,%1.sc,0,0} -with exact regX offsetted4 - yields {off_regXcon, %2.reg, %1.xreg, %1.sc, %2.bd, 0} -with exact regX DLOCAL yields {off_regXcon, lb, %1.xreg, %1.sc, %2.bd, 0} -with exact regX off_con yields {off_regXcon, %2.reg, %1.xreg,%1.sc,%2.bd,%2.od} -with exact regX ext_addr - yields {ext_regX, %1.sc, %1.xreg, %2.bd} -with exact regX absolute4 - yields {abs_regXcon, %1.sc, %1.xreg, %2.bd, 0} -with exact regX abs_con yields {abs_regXcon, %1.sc, %1.xreg, %2.bd, %2.od} -with exact indirect4 ext_addr - yields {off_con, %1.reg, 0, %2.bd} -with exact offsetted4 ext_addr - yields {off_con, %1.reg, %1.bd, %2.bd} -with exact LOCAL ext_addr - yields {off_con, lb, %1.bd, %2.bd} -with exact index_off4 ext_addr - yields {indoff_con, %1.reg, %1.xreg, %1.sc,%1.bd,%2.bd} -with exact absolute4 ext_addr - yields {abs_con, %1.bd, %2.bd} -with exact abs_index4 ext_addr - yields {absind_con, %1.sc, %1.xreg, %1.bd, %2.bd} -with exact indirect4 ext_regX - yields {off_regXcon, %1.reg, %2.xreg, %2.sc, 0, %2.bd} -with exact offsetted4 ext_regX - yields {off_regXcon, %1.reg, %2.xreg,%2.sc,%1.bd,%2.bd} -with exact LOCAL ext_regX - yields {off_regXcon, lb, %2.xreg, %2.sc, %1.bd, %2.bd} -with exact absolute4 ext_regX - yields {abs_regXcon, %2.sc, %2.xreg, %1.bd, %2.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - - /* I WOULD ALSO LIKE THIS: - * pat ads - * with const leaving adp %1.num - * BUT THAT DOESN'T WORK. - */ - -#if WORD_SIZE==2 -pat sbs $1==2 - leaving sbs 4 loc 4 loc 2 cii -#endif - -pat sbs $1==4 leaving sbi 4 - -/* regX type OK ??? */ -#ifdef TBL68020 -pat loc slu $2==4 leaving loc $1 sli 4 - -pat loc sli ads $1==1 && $2==4 && $3==4 -with D_REG4 yields {regX, 2, %1} - leaving ads 4 - -pat loc sli ads $1==2 && $2==4 && $3==4 -with D_REG4 yields {regX, 4, %1} - leaving ads 4 - -pat loc sli ads $1==3 && $2==4 && $3==4 -with D_REG4 yields {regX, 8, %1} - leaving ads 4 -#else - -pat loc sli $1==1 && $2==WORD_SIZE -with DD_REG - gen add_i %1, %1 yields %1 - -#if WORD_SIZE==2 -pat loc sli $1==1 && $2==4 -with DD_REG4 - gen add_l %1, %1 yields %1 -#endif - -#endif /* TBL68020 */ - - -/************************************************ - * Group 7: increment / decrement / zero * - ************************************************/ - -pat inc leaving loc 1 adi WORD_SIZE - -pat inl inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen add_i {const, 1}, {LOCAL, $1} - -pat inl - kills all_indir, LOCAL %bd==$1 - gen add_i {const, 1}, {LOCAL, $1} - -pat lol inl $1==$2 - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen add_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat ine - kills posextern - gen add_i {const, 1}, {absolute_int, $1} - -pat dec leaving loc 1 sbi WORD_SIZE - -pat del inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sub_i {const, 1}, {LOCAL, $1} - -pat del - kills all_indir, LOCAL %bd==$1 - gen sub_i {const, 1}, {LOCAL, $1} - -pat lol del $1==$2 - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen sub_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat dee - kills posextern - gen sub_i {const, 1}, {absolute_int, $1} - -pat zrl inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - -pat zrl inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move {const4,0}, {areg, regvar($1, reg_pointer)} - -pat zrl - kills all_indir, LOCAL %bd==$1 - gen clr_i {LOCAL, $1} - -pat zrl lol $1==$2 && inreg($1) < 0 - kills all_indir, LOCAL %bd==$1 - gen clr_i {LOCAL, $1} yields {zero_const, 0} - -pat zre - kills posextern - gen clr_i {absolute_int, $1} - -pat zre loe $1==$2 - kills posextern - gen clr_i {absolute_int, $1} yields {zero_const, 0} - -pat zer $1==4 yields {zero_const4, 0} -#if WORD_SIZE==2 -pat zer $1==6 yields {zero_const, 0} {zero_const, 0} {zero_const, 0} -#else -pat zer $1==8 yields {zero_const, 0} {zero_const, 0} -pat zer $1==12 yields {zero_const, 0} {zero_const, 0} {zero_const, 0} -#endif - -pat zer $1/WORD_SIZE <= 65536 -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - clr_i {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat zer -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE} - gen 1: - clr_i {pre_dec_int, sp} - sub_l {const4,1}, %a - bne {slabel, 1b} - -/************************************************ - * Group 8: convert instructions * - ************************************************/ - - - -pat cii -with STACK - kills ALL - gen jsr {absolute4, ".cii"} - -#if WORD_SIZE==2 -/* No sign-extension, though this is probably not what you may want. - * This will teach compiler writers not to convert between unsigneds and - * integers of a different size. - */ -pat loc loc ciu $1==2 && $2==4 -with zero_const - yields {zero_const4, 0} -with any -uses DD_REG4 = {zero_const4, 0} - gen move %1,%a.1 - yields %a - -pat loc loc ciu $1==4 && $2==2 -with zero_const4 - yields {zero_const, 0} -with any4 -uses reusing %1, DD_REG4 = %1 - yields %a.1 - -pat loc loc cui $1==2 && $2==4 -with any2 -uses DD_REG4={zero_const4,0} - gen move %1,%a.1 yields %a - -pat loc loc cui $1==4 && $2==2 -with DD_REG4 - yields %1.1 - -pat loc loc cuu $1==2 && $2==4 -with any2 -uses reusing %1,DD_REG4 - gen move %1,%a.1 - and_l {const4,65535}, %a yields %a -with any2 -uses DD_REG4={zero_const4,0} - gen move %1,%a.1 yields %a - -pat loc loc cuu $1==4 && $2==2 -with DD_REG4 - yields %1.1 -#endif - -pat cuu -with STACK - kills ALL - gen jsr {absolute4, ".cuu"} - -pat ciu leaving cuu - -pat cui leaving cuu - -#if TBL68881 -pat loc loc cif $1==4 && $2==4 -with data4 STACK - uses FS_REG - gen fmove_l %1,%a - fmove_s %a,{pre_dec4,sp} -pat loc loc cif $1==4 && $2==8 -with data4 STACK - uses FD_REG - gen fmove_l %1,%a - fmove_d %a,{pre_dec4,sp} -pat loc loc cuf $1==4 && $2==4 -with D_REG STACK - uses FS_REG - gen fmove_l %1,%a - tst_l %1 - bge {slabel, 1f} - fsub_l {const,0-2147483648},%a - fsub_l {const,0-2147483648},%a - 1: - fmove_s %a,{pre_dec4,sp} -pat loc loc cuf $1==4 && $2==8 -with D_REG STACK - uses FD_REG - gen fmove_l %1,%a - tst_l %1 - bge {slabel, 1f} - fsub_l {const,0-2147483648},%a - fsub_l {const,0-2147483648},%a - 1: - fmove_d %a,{pre_dec4,sp} -pat loc loc cfi $1==4 && $2==4 -with FS_REG - uses D_REG - gen fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfi $1==8 && $2==4 -with FD_REG - uses D_REG - gen fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfu $1==4 && $2==4 -with FS_REG - uses D_REG - gen fabs %1 - fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfu $1==8 && $2==4 -with FD_REG - uses D_REG - gen fabs %1 - fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cff $1==4 && $2==8 -with FS_REG STACK - gen fmove_d %1,{pre_dec4,sp} -pat loc loc cff $1==8 && $2==4 -with FD_REG STACK - gen fmove_s %1,{pre_dec4,sp} -#else -/* - * Floating point stuff - * Conversion - */ -#if WORD_SIZE==2 -/* The patterns need some room on the stack first */ -pat loc loc cif $1==2 && $2==4 leaving loc $1 cal ".cif4" - -pat loc loc cif $1==2 && $2==8 -with any2 -kills ALL -gen clr_l {pre_dec4, sp} - move_w %1,{pre_dec2, sp} leaving loc $1 cal ".cif8" - -pat loc loc cif $1==4 && $2==4 leaving loc $1 cal ".cif4" asp 2 - -pat loc loc cif $1==4 && $2==8 -with any4 -kills ALL -gen clr_w {pre_dec2, sp} - move_l %1,{pre_dec4, sp} leaving loc $1 cal ".cif8" - -pat loc loc cuf $1==2 && $2==4 leaving loc $1 cal ".cuf4" - -pat loc loc cuf $1==2 && $2==8 -with any2 -kills ALL -gen clr_l {pre_dec4, sp} - move_w %1,{pre_dec2, sp} leaving loc $1 cal ".cuf8" - -pat loc loc cuf $1==4 && $2==4 leaving loc $1 cal ".cuf4" asp 2 - -pat loc loc cuf $1==4 && $2==8 -with any4 -kills ALL -gen clr_w {pre_dec2, sp} - move_l %1,{pre_dec4, sp} leaving loc $1 cal ".cuf8" - -pat loc loc cfi $1==4 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfi" asp 8-$2 - -pat loc loc cfi $1==8 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfi" asp 12-$2 - -pat loc loc cfu $1==4 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfu" asp 8-$2 -pat loc loc cfu $1==8 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfu" asp 12-$2 -#else -pat loc loc cif $1==4 && $2==4 leaving loc 4 cal ".cif4" asp 4 -pat loc loc cif $1==4 && $2==8 leaving loc 4 cal ".cif8" -pat loc loc cuf $1==4 && $2==4 leaving loc 4 cal ".cuf4" asp 4 -pat loc loc cuf $1==4 && $2==8 leaving loc 4 cal ".cuf8" -pat loc loc cfi leaving loc $1 loc $2 cal ".cfi" asp $1+4 -pat loc loc cfu leaving loc $1 loc $2 cal ".cfu" asp $1+4 -#endif -pat loc loc cff $1==8 && $2==4 leaving cal ".cff4" asp 4 -pat loc loc cff $1==4 && $2==8 - leaving zer 4 exg 4 cal ".cff8" -#endif /* TBL68881 */ - -/************************************************ - * Group 9: logical instructions * - ************************************************/ - - -#if WORD_SIZE==2 -proc log2w -with datalt4+consts4-sconsts4 DD_REG4 - gen xxx* %1, %2 yields %2 -with DD_REG4 datalt4+consts4-sconsts4 - gen xxx* %2, %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen xxx* {post_inc4, sp}, %a yields %a -#endif - -proc logw -with datalt_int+consts-sconsts DD_REG - gen xxx* %1, %2 yields %2 -with DD_REG datalt_int+consts-sconsts - gen xxx* %2, %1 yields %1 -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen xxx* {post_inc_int, sp}, %a yields %a - -proc logdef example and -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1}, - AA_REG, - DD_REG - gen - lea {regAcon, sp, $1}, %b - 1: - move_i {post_inc_int, sp}, %c - xxx* %c, {post_inc_int, %b} - dbf %a, {slabel, 1b} - -#if WORD_SIZE==4 -proc logndef -with DD_REG4 STACK - uses AA_REG, - DD_REG - gen - lea {regAregXcon, sp, %1, 1, 0},%a - asr_l {small_const, 2}, %1 - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - sub_l {const4,1}, %1 - bne {slabel, 1b} -#else -proc logndef -with any_int STACK - uses AA_REG, - DD_REG, - DD_REG4={const,0} - gen - move %1, %c.1 - lea {regAregXcon, sp, %c, 1, 0},%a - asr_l {small_const, 1}, %c - sub_l {const4,1}, %c - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - dbf %c, {slabel, 1b} -#endif - -proc logbdef example and -with STACK - uses AA_REG, - DD_REG, - DD_REG4 - gen - move_l {const4,$1/WORD_SIZE}, %c - lea {regAregXcon, sp, %c, 1, 0},%a - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - sub_l {const4,1}, %c - bne {slabel, 1b} - -pat and $1==WORD_SIZE call logw(AND_I) -#if WORD_SIZE==2 -pat and $1==2*WORD_SIZE call log2w("and.l") -#endif -pat and $1>4 && $1/WORD_SIZE<=65536 call logdef(AND_I) -pat and defined($1) call logbdef(AND_I) -pat and !defined($1) call logndef(AND_I) - -pat ior $1==WORD_SIZE call logw(OR_I) -#if WORD_SIZE==2 -pat ior $1==2*WORD_SIZE call log2w("or.l") -#endif -pat ior $1>2 && $1/WORD_SIZE<=65536 call logdef(OR_I) -pat ior defined($1) call logbdef(OR_I) -pat ior !defined($1) call logndef(OR_I) - -#if WORD_SIZE==2 -pat xor $1==2 -with DD_REG conreg2-bconst - gen eor_w %2, %1 yields %1 -#endif - -pat xor $1==4 -with DD_REG4 conreg4-bconst4 - gen eor_l %2, %1 yields %1 - -pat xor $1>4 && $1/WORD_SIZE<=65536 call logdef(EOR_I) -pat xor defined($1) call logbdef(EOR_I) -pat xor !defined($1) call logndef(EOR_I) - -#if WORD_SIZE==2 -pat com $1==2 -with DD_REG - gen not_w %1 yields %1 -#endif - -pat com $1==4 -with DD_REG4 - gen not_l %1 yields %1 - -pat com $1==8 -with DD_REG4 DD_REG4 - gen not_l %1 - not_l %2 yields %2 %1 - -pat com $1>8 && $1/WORD_SIZE<=65536 -with STACK - uses AA_REG, - DD_REG4 = {const, $1/WORD_SIZE -1} - gen move_l sp, %a - 1: - not_i {post_inc_int, %a} - dbf %b, {slabel, 1b} - -pat com defined($1) -with STACK - uses AA_REG, - DD_REG4 = {const, $1/WORD_SIZE} - gen move_l sp, %a - 1: - not_i {post_inc_int, %a} - sub_l {const4, 1}, %b - bne {slabel, 1b} - -#if WORD_SIZE==4 -pat com !defined($1) -with DD_REG STACK - uses AA_REG - gen move_l sp, %a - asr_l {small_const, 2}, %1 - 1: - not_i {post_inc_int, %a} - sub_l {const4, 1}, %1 - bne {slabel, 1b} -#else -pat com !defined($1) -with any_int STACK - uses AA_REG, - DD_REG4={const,0} - gen move %1, %b.1 - move_l sp, %a - asr_l {small_const, 1}, %b - sub_l {const4, 1}, %b - 1: - not_i {post_inc_int, %a} - dbf %b, {slabel, 1b} -#endif - -#if WORD_SIZE==2 -pat rol $1==2 -with shconreg DD_REG - gen rol_w %1, %2 yields %2 -#endif - -pat rol $1==4 -with shconreg DD_REG4 - gen rol_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat ror $1==2 -with shconreg DD_REG - gen ror_w %1, %2 yields %2 -#endif - -pat ror $1==4 -with shconreg DD_REG4 - gen ror_l %1, %2 yields %2 - - - - -/************************************************ - * Group 10: sets * - ************************************************/ - -#if WORD_SIZE==2 -pat inn $1==4 -with conreg2 DD_REG4 - gen btst %1, %2.1 - sne {dreg1, %2.1} - and_l {const4, 1}, %2 - yields %2.1 -#endif - -pat inn $1==WORD_SIZE -with conreg2 DD_REG - gen btst %1, %2 - sne {dreg1, %2} - and_i {const, 1}, %2 - yields %2 - -/* The interface for the .inn differ for m68k2 and m68k4. */ -/* ??? Work out a cleaner interface, that is similar for all tables */ -#if WORD_SIZE==2 -pat inn defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 - -pat inn !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 -#else -pat inn defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - move {const, $1}, d1 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 - -pat inn !defined($1) -with any_int any_int STACK - kills ALL - gen move %2, d0 - move %1, d1 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 -#endif /* WORD_SIZE==2 */ - -pat loc inn $2==WORD_SIZE && small($1) -with DD_REG - gen asr_i {small_const, $1}, %1 - and_i {const, 1}, %1 - yields %1 - -#if WORD_SIZE==2 -pat set $1==2 -with conreg2 - uses DD_REG = {zero_const, 0} - gen bset %1, %a yields %a -#else - -pat set $1==4 -with conreg2 - uses DD_REG4 = {zero_const4, 0} - gen bset %1, %a yields %a -#endif - -#if WORD_SIZE==2 -pat set $1>2 -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".set"} - -pat set !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".set"} -#else -pat set $1>4 -with any_int STACK - kills ALL - gen move %1, d0 - move {const, $1}, d1 - jsr {absolute4, ".set"} - -pat set !defined($1) -with any_int any_int STACK - kills ALL - gen move %2, d0 - move %1, d1 - jsr {absolute4, ".set"} -#endif /* WORD_SIZE==2 */ - - - - -/************************************************ - * Group 11: arrays * - ************************************************/ - -/* ??? interface */ -#if WORD_SIZE==2 -pat lar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".lar"} - -pat sar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".sar"} - -pat aar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".aar"} -#else -pat lar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".lar"} - -pat lar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".lar"} - -pat sar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".sar"} - -pat sar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".sar"} - -pat aar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".aar"} - yields a0 - -pat aar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".aar"} - yields a0 - -#if ARR_OPT -pat lae lar $2==4 && nicesize(rom($1,3)) - leaving lae $1 aar 4 loi rom($1, 3) -pat lae sar $2==4 && nicesize(rom($1,3)) - leaving lae $1 aar 4 sti rom($1, 3) - -pat lae aar $2==4 && rom($1,3)==1 - leaving ads 4 adp 0-rom($1,1) - -#ifdef TBL68020 -pat lae aar $2==4 && nicesize(rom($1,3)) -with D_REG yields {regX, rom($1,3), %1} - leaving ads 4 adp rom($1,3)*(0-rom($1,1)) -#else /* TBL68020 */ -pat lae aar $2==4 && rom($1,3)==2 -with DD_REG - gen asl_l {small_const, 1}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<1 - -pat lae aar $2==4 && rom($1,3)==4 -with DD_REG - gen asl_l {small_const, 2}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<2 - -pat lae aar $2==4 && rom($1,3)==8 -with DD_REG - gen asl_l {small_const, 3}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<3 -#endif /* TBL68020 */ -#endif /* ARR_OPT */ -#endif /* WORD_SIZE!=2 */ - - /* I WOULD ALSO LIKE THESE: - * pat lae aar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * pat lae lar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * loi rom($1,3) - * pat lae sar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * sti rom($1,3) - * BUT THEY DON'T WORK. - */ - - - -/************************************************ - * Group 12: compare instructions * - ************************************************/ - - -#if WORD_SIZE==2 -pat cmi defined($1) && $1==2 -with any2 DD_REG - uses DD_REG = {zero_const, 0} - gen cmp_w %1,%2 - beq {slabel,2f} - bgt {slabel,1f} - add_w {small_const, 1},%a - bra {slabel,2f} - 1: - sub_w {small_const, 1},%a - 2: - yields %a - -pat cmi defined($1) && $1==4 -with STACK - gen jsr {absolute4, ".cmi"} yields d1 -#else -/* pat cmi $1==4 leaving sbi 4 - WRONG !! -*/ - -pat cmi defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cmi"} - yields d0 - -pat cmi !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cmi"} - yields d0 -#endif - -/* pat cmu $1==4 leaving sbi 4 - WRONG !! -*/ - -#if WORD_SIZE==2 -pat cmu defined($1) -with STACK - gen move {const, $1},d0 - jsr {absolute4, ".cmu"} - -pat cmu !defined($1) -with any STACK - gen move %1,d0 - jsr {absolute4, ".cmu"} -#else -pat cmu defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cmu"} - yields d0 - -pat cmu !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cmu"} - yields d0 -#endif /* WORD_SIZE==2 */ - -#if WORD_SIZE==2 -pat cms $1==2 leaving cmi 2 -pat cms $1==4 leaving cmi 4 -#else -pat cms $1==4 leaving cmi 4 -#endif - -pat cms defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cms"} - yields d0 - -pat cms !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cms"} - yields d0 - -pat cmp leaving cmu 4 - -#ifndef XXXXX -proc txx -with test_set_int - uses reusing %1,DD_REG - gen test %1 - bxx[1] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - bxx[2] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a - -/* for some branches, we need to get rid of the overflow bit first. - The easiest way to do this is to just test .... -*/ -proc txx_ouch -with test_set_int - uses reusing %1,DD_REG - gen killcc. - test %1 - bxx[1] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - bxx[2] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a - -pat tlt call txx("bmi", "bcs") -pat tle call txx_ouch("ble", "bls") -pat teq call txx("beq", "beq") -pat tne call txx("bne", "bne") -pat tge call txx("bpl", "bcc") -pat tgt call txx_ouch("bgt", "bhi") -#else -proc txx -with test_set_int - uses reusing %1,DD_REG - gen test %1 - sxx[1] %a - neg_b %a - yields {extend1, %a} - -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} - -pat tlt call txx("smi", "scs") -pat tle call txx("sle", "sls") -pat teq call txx("seq", "seq") -pat tne call txx("sne", "sne") -pat tge call txx("spl", "scc") -pat tgt call txx("sgt", "shi") -#endif - -/* - * Floating point - * Comparision - */ -#if TBL68881 -pat cmf $1==4 -with FS_REG FS_REG - uses D_REG={const,0} - gen fcmp %1,%2 - fbeq {slabel,2f} - fblt {slabel,1f} - add_l {const,1},%a - bra {slabel,2f} - 1: - sub_l {const,1},%a - 2: yields %a -pat cmf $1==8 -with FD_REG FD_REG - uses D_REG={const,0} - gen fcmp %1,%2 - fbeq {slabel,2f} - fblt {slabel,1f} - add_l {const,1},%a - bra {slabel,2f} - 1: - sub_l {const,1},%a - 2: yields %a -#else -pat cmf $1==4 leaving cal ".cmf4" asp 8 lfr WORD_SIZE -pat cmf $1==8 leaving cal ".cmf8" asp 16 lfr WORD_SIZE -#endif -/* - * Floating Point - * Zero Constants - */ -pat zrf leaving zer $1 - -/************************************************ - * Group 13: branch instructions * - ************************************************/ - -#if WORD_SIZE==2 -pat lab topeltsize($1)==4 && !fallthrough($1) -kills ALL -gen labeldef $1 yields dl0 - -pat lab topeltsize($1)==4 && fallthrough($1) -with any4 STACK -kills ALL -gen move %1, dl0 - killreg dl0 - labeldef $1 yields dl0 -#endif - -pat lab topeltsize($1)==WORD_SIZE && !fallthrough($1) -kills ALL -gen labeldef $1 yields d0 - -pat lab topeltsize($1)==WORD_SIZE && fallthrough($1) -with any_int STACK -kills ALL -gen move %1,d0 - killreg d0 - labeldef $1 yields d0 - -pat lab -with STACK -kills ALL -gen labeldef $1 - -#if WORD_SIZE==2 -pat bra topeltsize($1)==4 -with any4 STACK -gen move %1,dl0 - bra {llabel, $1} -#endif - -pat bra topeltsize($1)==WORD_SIZE -with any_int STACK -gen move %1,d0 - bra {llabel, $1} - -pat bra -with STACK - gen bra {llabel, $1} - -proc brxx example beq -with exact extend1 extend1 - kills ALL - gen cmp_b %1,%2 - bxx[1] {llabel, $1} -#if WORD_SIZE!=2 -with exact extend2 extend2 - kills ALL - gen cmp_w %1,%2 - bxx[1] {llabel, $1} -#endif -with exact sconsts any_int - kills ALL - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {llabel, $1} -with exact any_int sconsts - kills ALL - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {llabel, $1} -with any_int-sconsts genreg STACK - gen cmp_i %1, %2 - bxx[1] {llabel, $1} -with genreg any_int-sconsts STACK - gen cmp_i %2, %1 - bxx[2] {llabel, $1} -with exact immediate_int-sconsts imm_cmp_int - kills ALL - gen cmp_i %1, %2 - bxx[1] {llabel, $1} -with exact imm_cmp_int immediate_int-sconsts - kills ALL - gen cmp_i %2, %1 - bxx[2] {llabel, $1} -with exact immediate_int-sconsts STACK - gen cmp_i %1, {post_inc_int, sp} - bxx[1] {llabel, $1} -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - bxx[2] {llabel, $1} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - bxx[2] {llabel, $1} -#if WORD_SIZE==4 -with exact post_inc4 post_inc4 - gen cmp_l %1,%2 - bxx[1] {llabel, $1} -#endif -with exact post_inc2 post_inc2 - gen cmp_w %1,%2 - bxx[1] {llabel, $1} -with exact post_inc1 post_inc1 - gen cmp_b %1,%2 - bxx[1] {llabel, $1} - -pat blt call brxx("blt","bgt") -pat ble call brxx("ble","bge") -pat beq call brxx("beq","beq") -pat bne call brxx("bne","bne") -pat bge call brxx("bge","ble") -pat bgt call brxx("bgt","blt") - -proc zxx example zeq -with test_set_int STACK - gen test %1 - bxx[1] {llabel, $1} -#if WORD_SIZE==2 -with test_set1 STACK -#else -with test_set1 + test_set2 STACK -#endif - gen test %1 - bxx[2] {llabel, $1} -with exact STACK - gen tst_i {post_inc_int, sp} - bxx[1] {llabel, $1} - -/* for some branches, we need to get rid of the overflow bit first. - The easiest way to do this is to just test .... -*/ -proc zxx_ouch example zeq -with test_set_int STACK - gen killcc. - test %1 - bxx[1] {llabel, $1} -#if WORD_SIZE==2 -with test_set1 STACK -#else -with test_set1 + test_set2 STACK -#endif - gen test %1 - bxx[2] {llabel, $1} -with exact STACK - gen tst_i {post_inc_int, sp} - bxx[1] {llabel, $1} - -pat zlt call zxx("bmi", "bcs") -pat zle call zxx_ouch("ble", "bls") -pat zeq call zxx("beq", "beq") -pat zne call zxx("bne", "bne") -pat zge call zxx("bpl", "bcc") -pat zgt call zxx_ouch("bgt", "bhi") - -/************************************************ - * Group 14: procedure calls instructions * - ************************************************/ - - -pat cai -with exact ext_addr - kills ALL - gen jsr {absolute4, %1.bd} -with A_REG STACK - kills ALL - gen jsr {indirect4, %1} -with STACK - kills ALL - uses AA_REG = {post_inc4, sp} - gen jsr {indirect4, %a} -with address STACK - kills ALL - gen jsr %1 - -pat cal -with STACK - kills ALL - gen jsr {absolute4, $1} - -#if WORD_SIZE==2 -pat lfr $1==2 yields d0 -pat lfr $1==4 yields dl0 -pat lfr $1==8 yields dl1 dl0 -#else -pat lfr $1==4 yields d0 -pat lfr $1==8 yields d1 d0 -#endif - -pat ret $1==0 - gen return - -pat asp ret $2==0 - gen return - -#if WORD_SIZE==2 -pat ret $1==2 -with any2 - gen move %1, d0 - return -with exact STACK - gen move_w {post_inc2, sp}, d0 - return -#endif - -pat ret $1==4 -with any4 - gen move %1, dl0 - return -with exact STACK - gen move_l {post_inc4, sp}, dl0 - return - -pat ret $1==8 -with any4 any4 - gen move %1, dl0 - move %2, dl1 - return -with exact any4 STACK - gen move %1, dl0 - move_l {post_inc4, sp}, dl1 - return -with exact STACK - gen move_l {post_inc4, sp}, dl0 - move_l {post_inc4, sp}, dl1 - return - - -/************************************************ - * Group 15: miscellaneous instructions * - ************************************************/ - -#if WORD_SIZE==2 -pat asp $1==2 -with any2-pre_post -with STACK - gen add_l {const4, $1}, sp -#endif - -pat asp $1==4 -#if WORD_SIZE==2 -with any-pre_post any-pre_post -#endif -with any4-pre_post -with STACK - gen add_l {const4, $1}, sp - -#if WORD_SIZE==2 -pat asp $1==6 -with any4-pre_post any-pre_post -with any-pre_post any4-pre_post -with any-pre_post any-pre_post any-pre_post -with STACK - gen add_l {const4, $1}, sp -#endif - -pat asp $1==8 -with any4-pre_post any4-pre_post -with STACK - gen add_l {const4, $1}, sp - -pat asp -with STACK - gen lea {regAcon, sp, $1}, sp - -/* ??? DD_REG$ ??? */ -#if WORD_SIZE==2 -pat ass $1==2 -with any2 STACK -uses reusing %1,DD_REG4 - gen move %1,%a.1 - ext_l %a.1 - add_l %a, sp -#endif - -pat ass $1==4 -with any4 STACK - gen add_l %1, sp - -#if WORD_SIZE==2 -pat blm $1==2 -with A_REG A_REG - kills allexceptcon - gen move_w {indirect2, %2}, {indirect2, %1} -#endif - -pat blm $1==4 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - -#if WORD_SIZE==2 -pat blm $1==6 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - move_w {offsetted2, %2, 4}, {offsetted2, %1, 4} -#endif - -pat blm $1==8 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - move_l {offsetted4, %2, 4}, {offsetted4, %1, 4} - -pat blm $1>2*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG AA_REG - kills ALL - uses DD_REG4={const, $1/WORD_SIZE -1} - gen 1: - move_i {post_inc_int, %2}, {post_inc_int, %1} - dbf %a, {slabel, 1b} - -pat blm -with AA_REG AA_REG - kills ALL - uses DD_REG4={const,$1/WORD_SIZE} - gen 1: - move_i {post_inc_int, %2}, {post_inc_int, %1} - sub_l {const4, 1}, %a - bne {slabel, 1b} - -#if WORD_SIZE==2 -pat bls $1==2 -with DD_REG AA_REG AA_REG - kills ALL - gen asr_w {small_const, 1}, %1 - beq {slabel, 2f} - 1: - move_w {post_inc2, %3}, {post_inc2, %2} - sub_w {const, 1}, %1 - bne {slabel, 1b} - 2: -#endif - -pat bls $1==4 -with DD_REG4 AA_REG AA_REG - kills ALL - gen -#if WORD_SIZE==2 - asr_l {small_const, 1}, %1 -#else - asr_l {small_const, 2}, %1 -#endif - beq {slabel, 2f} - 1: - move_i {post_inc_int, %3}, {post_inc_int, %2} - sub_l {const4, 1}, %1 - bne {slabel, 1b} - 2: - -#if WORD_SIZE==2 -pat csa $1==2 -#if TBL68020 -with any4 D_REG+LOCAL+const+ILOCAL+absolute2 STACK -#else -with any4 D_REG+LOCAL+const+absolute2 STACK -#endif - gen move %1,a0 - move %2,d0 - jmp {absolute4, ".csa2"} -#endif - -pat csa $1==4 -#if TBL68020 && WORD_SIZE==4 -with any4 D_REG4+DLOCAL+const4+ILOCAL+absolute4 STACK -#else -with any4 D_REG4+DLOCAL+const4+absolute4 STACK -#endif - gen move %1,a0 - move %2,dl0 - jmp {absolute4, ".csa4"} - -#if WORD_SIZE==2 -pat csb $1==2 -#if TBL68020 -with any4 D_REG+LOCAL+const+ILOCAL+absolute2 STACK -#else -with any4 D_REG+LOCAL+const+absolute2 STACK -#endif - gen move %1,a0 - move %2,d0 - jmp {absolute4, ".csb2"} -#endif - -pat csb $1==4 -#if TBL68020 && WORD_SIZE==4 -with any4 D_REG4+DLOCAL+const4+ILOCAL+absolute4 STACK -#else -with any4 D_REG4+DLOCAL+const4+absolute4 STACK -#endif - gen move %1,a0 - move %2,dl0 - jmp {absolute4, ".csb4"} - -pat dch leaving loi 4 - -#if WORD_SIZE==2 -pat dup $1==2 -with dups2 yields %1 %1 -#endif - -pat dup $1==4 -#if WORD_SIZE==2 -with dups2 dups2 yields %2 %1 %2 %1 -#endif -with dups4 yields %1 %1 - -pat dup $1==8 -with dups4 dups4 yields %2 %1 %2 %1 - -pat dup $1>2*WORD_SIZE && $1/WORD_SIZE<=65536 -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - move_i {offsetted_int, sp, $1 -WORD_SIZE}, {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat dup -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE} - gen 1: - move_i {offsetted_int, sp, $1 -WORD_SIZE}, {pre_dec_int, sp} - sub_l {const4, 1}, %a - bne {slabel, 1b} - -#if WORD_SIZE==2 -pat dus $1==2 -with any2 STACK - uses DD_REG4 = {zero_const4, 0}, AA_REG - gen - move_w %1, %a.1 - lea {regAregXcon, sp, %a, 1, 0}, %b - asr_l {small_const, 1}, %a - beq {slabel, 2f} - 1: - move_w {pre_dec2, %b}, {pre_dec2, sp} - sub_l {const4, 1}, %a - bne {slabel, 1b} - 2: -#endif - -pat dus $1==4 -with DD_REG4 STACK - uses AA_REG - gen - lea {regAregXcon, sp, %1, 1, 0}, %a -#if WORD_SIZE==2 - asr_l {small_const, 1}, %1 -#else - asr_l {small_const, 2}, %1 -#endif - beq {slabel, 2f} - 1: - move_i {pre_dec_int, %a}, {pre_dec_int, sp} - sub_l {const4, 1}, %1 - bne {slabel, 1b} - 2: - -#if WORD_SIZE==2 -pat exg $1==2 -with any2 any2 yields %1 %2 -#endif - -pat exg $1==4 -with any4 any4 yields %1 %2 - -pat exg defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".exg"} - -pat exg !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".exg"} - -pat fil - gen move_l {ext_addr, $1}, {absolute4, ".filn"} - -pat gto -with STACK - uses AA_REG = {ext_addr, $1} - gen move_l {offsetted4, %a, 8}, lb - move_l {offsetted4, %a, 4}, sp -#if TBL68020 && FANCY_MODES - jmp {OFF_off4, %a, 0, 0} -#else - move_l {indirect4, %a}, %a - jmp {indirect4, %a} -#endif - -pat lim yields {absolute_int, ".trpim"} - -pat lin - kills posextern - gen move_i {const, $1}, {absolute_int, ".lino"} - -pat lni - kills posextern - gen add_i {const, 1}, {absolute_int, ".lino"} - -pat lor $1==0 yields lb - -pat lor $1==1 -with STACK - uses AA_REG = sp yields %a - -pat lor $1==2 yields {absolute4, ".reghp"} - -pat lpb leaving adp 8 - -pat mon -with STACK - kills ALL - gen jsr {absolute4, ".mon"} - -pat nop -with STACK - kills ALL -#ifdef DEBUG - gen jsr {absolute4, ".nop"} -#endif - -#if WORD_SIZE==2 -pat rck $1==2 -#ifdef TBL68020 -with ext_addr D_REG - gen cmp2_w {absolute2, %1.bd}, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with address-ext_addr D_REG - gen cmp2_w %1, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with A_REG D_REG - gen cmp2_w {indirect2, %1}, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -#else -with STACK - kills ALL - gen jsr {absolute4, ".rck"} -#endif -#endif /* WORD_SIZE==2 */ - -#if WORD_SIZE==4 || TBL68020 -pat rck $1==4 -#ifdef TBL68020 -with ext_addr D_REG4 - gen cmp2_l {absolute4, %1.bd}, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with address-ext_addr D_REG4 - gen cmp2_l %1, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with A_REG D_REG4 - gen cmp2_l {indirect4, %1}, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".rck"} -#endif /* TBL68020 */ -#endif /* WORD_SIZE==4 || TBL68020 */ - -pat rtt leaving ret 0 - -pat sig -with any4 - kills posextern - uses AA_REG - gen move_l {absolute4, ".trppc"}, %a - move_l %1, {absolute4, ".trppc"} - yields %a - -pat sim -with any_int - kills posextern - gen move_i %1, {absolute_int, ".trpim"} - -pat str $1==0 -with any4 STACK - kills ALL - gen move_l %1, lb - -pat str $1==1 -with any4 STACK - gen move_l %1, sp - -pat str $1==2 -with STACK - kills ALL - gen jsr {absolute4, ".strhp"} - -pat trp -with STACK - kills ALL - gen jsr {absolute4, ".trp"} - - - -/************************************************ - * more rules for long EM-patterns * - ************************************************/ - -pat loe ine $1==$2 - kills posextern - uses DD_REG = {absolute_int, $1} - gen add_i {const,1}, {absolute_int, $1} - killreg %a - yields %a - -pat loe dee $1==$2 - kills posextern - uses DD_REG = {absolute_int, $1} - gen sub_i {const,1}, {absolute_int, $1} - killreg %a - yields %a - - -proc llol1shstl example lol loc sli stl /* only left */ - kills all_indir, DLOCAL %bd==$1 - gen shw* {offsetted2, lb, $1+2} - roxl {offsetted2, lb, $1} - -proc lloe1shste example loe loc sli ste /* only left */ - kills posextern - gen shw* {absolute2, $1+2} - roxl {absolute2, $1} - -proc llil1shsil example lil loc sli sil /* only left */ - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen shw* {OFF_off2, lb, $1, 2} - roxl {OFF_off2, lb, $1, 0} -#else - uses AA_REG = {DLOCAL, $1} - gen shw* {offsetted2, %a, 2} - roxl {indirect2, %a} -#endif - -proc rlol1shstl example lol loc sri stl /* only right */ - kills all_indir, DLOCAL %bd==$1 - gen shw* {offsetted2, lb, $1} - roxr {offsetted2, lb, $1+2} - -proc rloe1shste example loe loc sri ste /* only right */ - kills posextern - gen shw* {absolute2, $1} - roxr {absolute2, $1+2} - -proc rlil1shsil example lil loc sri sil /* only right */ - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen shw* {OFF_off2, lb, $1, 0} - roxr {OFF_off2, lb, $1, 2} -#else - uses AA_REG = {DLOCAL, $1} - gen shw* {indirect2, %a} - roxr {offsetted2, %a, 2} -#endif - -pat lol loc sli stl $1==$4 && $2==1 && $3==4 call llol1shstl("asl #1,") -pat loe loc sli ste $1==$4 && $2==1 && $3==4 call lloe1shste("asl #1,") -pat lil loc sli sil $1==$4 && $2==1 && $3==4 call llil1shsil("asl #1,") -pat lol loc sri stl $1==$4 && $2==1 && $3==4 call rlol1shstl("asr #1,") -pat loe loc sri ste $1==$4 && $2==1 && $3==4 call rloe1shste("asr #1,") -pat lil loc sri sil $1==$4 && $2==1 && $3==4 call rlil1shsil("asr #1,") -pat lol loc slu stl $1==$4 && $2==1 && $3==4 call llol1shstl("asl #1,") -pat loe loc slu ste $1==$4 && $2==1 && $3==4 call lloe1shste("asl #1,") -pat lil loc slu sil $1==$4 && $2==1 && $3==4 call llil1shsil("asl #1,") -pat lol loc sru stl $1==$4 && $2==1 && $3==4 call rlol1shstl("lsr #1,") -pat loe loc sru ste $1==$4 && $2==1 && $3==4 call rloe1shste("lsr #1,") -pat lil loc sru sil $1==$4 && $2==1 && $3==4 call rlil1shsil("lsr #1,") - - -proc txxand -with test_set_int DD_REG - gen test %1 - bxx[1] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 - -proc txxior -with test_set_int DD_REG - gen test %1 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 - -proc txxand_ouch -with test_set_int DD_REG - gen killcc. - test %1 - bxx[1] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 - -proc txxior_ouch -with test_set_int DD_REG - gen killcc. - test %1 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 - -pat tlt and $2==WORD_SIZE call txxand("bmi", "bcs") -pat tle and $2==WORD_SIZE call txxand_ouch("ble", "bls") -pat teq and $2==WORD_SIZE call txxand("beq", "beq") -pat tne and $2==WORD_SIZE call txxand("bne", "bne") -pat tge and $2==WORD_SIZE call txxand("bpl", "bcc") -pat tgt and $2==WORD_SIZE call txxand_ouch("bgt", "bhi") - -pat tlt ior $2==WORD_SIZE call txxior("bpl", "bcc") -pat tle ior $2==WORD_SIZE call txxior_ouch("bgt", "bhi") -pat teq ior $2==WORD_SIZE call txxior("bne", "bne") -pat tne ior $2==WORD_SIZE call txxior("beq", "beq") -pat tge ior $2==WORD_SIZE call txxior("bmi", "bcs") -pat tgt ior $2==WORD_SIZE call txxior_ouch("ble", "bls") - -proc cmxtxxand -with exact extend1 extend1 DD_REG - gen cmp_b %2, %1 - bxx[2] {llabel,1f} - bclr {const,0}, %3 - 1: yields %3 -with exact extend2 extend2 DD_REG - gen cmp_w %2, %1 - bxx[2] {llabel,1f} - bclr {const,0}, %3 - 1: yields %3 -with exact sconsts any_int DD_REG - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact any_int sconsts DD_REG - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with any_int-sconsts genreg DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with genreg any_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact immediate_int-sconsts imm_cmp_int DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact imm_cmp_int immediate_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 - -proc cmxtxxior -with exact extend1 extend1 DD_REG - gen cmp_b %2, %1 - bxx[2] {llabel,1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact extend2 extend2 DD_REG - gen cmp_w %2, %1 - bxx[2] {llabel,1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact sconsts any_int DD_REG - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact any_int sconsts DD_REG - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with any_int-sconsts genreg DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with genreg any_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact immediate_int-sconsts imm_cmp_int DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact imm_cmp_int immediate_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 - -proc cmxtxx -with exact sconsts any_int - uses DD_REG=%1 - gen cmp_i %2, %a - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact any_int sconsts - uses DD_REG=%2 - gen cmp_i %1, %a - sxx[1] %a - neg_b %a - yields {extend1, %a} -with any_int-sconsts genreg - uses reusing %1,reusing %2,DD_REG - gen cmp_i %1, %2 - sxx[1] %a - neg_b %a - yields {extend1, %a} -with genreg any_int-sconsts - uses reusing %1,reusing %2,DD_REG - gen cmp_i %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact extend1 extend1 - uses reusing %1,reusing %2,DD_REG - gen cmp_b %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact extend2 extend2 - uses reusing %1,reusing %2,DD_REG - gen cmp_w %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact immediate_int-sconsts imm_cmp_int - uses reusing %2,DD_REG - gen cmp_i %1, %2 - sxx[1] %a - neg_b %a - yields {extend1, %a} -with exact imm_cmp_int immediate_int-sconsts - uses reusing %1,DD_REG - gen cmp_i %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact immediate_int-sconsts STACK - uses DD_REG - gen cmp_i %1, {post_inc_int, sp} - sxx[1] %a - neg_b %a - yields {extend1, %a} -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - sxx[2] %a - neg_b %a - yields {extend1, %a} - -pat cmi tlt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("blt","bgt") -pat cmi tle and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("ble","bge") -pat cmi teq and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("beq","beq") -pat cmi tne and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bne","bne") -pat cmi tge and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bge","ble") -pat cmi tgt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bgt","blt") - -pat cmu tlt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bcs","bhi") -pat cmu tle and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bls","bcc") -pat cmu teq and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("beq","beq") -pat cmu tne and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bne","bne") -pat cmu tge and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bcc","bls") -pat cmu tgt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bhi","bcs") - -pat cmi tlt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bge","ble") -pat cmi tle ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bgt","blt") -pat cmi teq ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bne","bne") -pat cmi tne ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("beq","beq") -pat cmi tge ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("blt","bgt") -pat cmi tgt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("ble","bge") - -pat cmu tlt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bcc","bls") -pat cmu tle ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bhi","bcs") -pat cmu teq ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bne","bne") -pat cmu tne ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("beq","beq") -pat cmu tge ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bcs","bhi") -pat cmu tgt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bls","bcc") - -pat cmi tlt $1==WORD_SIZE call cmxtxx("slt","sgt") -pat cmi tle $1==WORD_SIZE call cmxtxx("sle","sge") -pat cmi teq $1==WORD_SIZE call cmxtxx("seq","seq") -pat cmi tne $1==WORD_SIZE call cmxtxx("sne","sne") -pat cmi tge $1==WORD_SIZE call cmxtxx("sge","sle") -pat cmi tgt $1==WORD_SIZE call cmxtxx("sgt","slt") - -pat cmu tlt $1==WORD_SIZE call cmxtxx("scs","shi") -pat cmu tle $1==WORD_SIZE call cmxtxx("sls","scc") -pat cmu teq $1==WORD_SIZE call cmxtxx("seq","seq") -pat cmu tne $1==WORD_SIZE call cmxtxx("sne","sne") -pat cmu tge $1==WORD_SIZE call cmxtxx("scc","sls") -pat cmu tgt $1==WORD_SIZE call cmxtxx("shi","scs") - - -proc cmuzxx example cmu zlt -with exact sconsts any_int - kills ALL - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {llabel, $2} -with exact any_int sconsts - kills ALL - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {llabel, $2} -with any_int-sconsts genreg STACK - gen cmp_i %1, %2 - bxx[1] {llabel, $2} -with genreg any_int-sconsts STACK - gen cmp_i %2, %1 - bxx[2] {llabel, $2} -with exact immediate_int-sconsts imm_cmp_int - kills ALL - gen cmp_i %1, %2 - bxx[1] {llabel, $2} -with exact imm_cmp_int immediate_int-sconsts - kills ALL - gen cmp_i %2, %1 - bxx[2] {llabel, $2} -with exact immediate_int-sconsts STACK - gen cmp_i %1, {post_inc_int, sp} - bxx[1] {llabel, $2} -with exact any_int STACK - uses reusing %1, DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - bxx[2] {llabel, $2} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - bxx[2] {llabel, $2} -with data2-sconsts dreg2 STACK - gen cmp_w %1, %2 - bxx[1] {llabel, $2} -with dreg2 data2-conreg2-sconsts STACK - gen cmp_w %2, %1 - bxx[2] {llabel, $2} -with data1 dreg1 STACK - gen cmp_b %1, %2 - bxx[1] {llabel, $2} -with dreg1 data1-conreg1 STACK - gen cmp_b %2, %1 - bxx[2] {llabel, $2} - -pat cmu zlt $1==WORD_SIZE call cmuzxx("bcs","bhi") -pat cmu zle $1==WORD_SIZE call cmuzxx("bls","bcc") -pat cmu zeq $1==WORD_SIZE call cmuzxx("beq","beq") -pat cmu zne $1==WORD_SIZE call cmuzxx("bne","bne") -pat cmu zge $1==WORD_SIZE call cmuzxx("bcc","bls") -pat cmu zgt $1==WORD_SIZE call cmuzxx("bhi","bcs") - - -#if TBL68881 -proc cmf4zxx example cmf zlt -with FS_REG FS_REG - gen fcmp %1,%2 - bxx* {llabel, $2} - -pat cmf zlt $1==4 call cmf4zxx("fblt") -pat cmf zle $1==4 call cmf4zxx("fble") -pat cmf zne $1==4 call cmf4zxx("fbne") -pat cmf zeq $1==4 call cmf4zxx("fbeq") -pat cmf zge $1==4 call cmf4zxx("fbge") -pat cmf zgt $1==4 call cmf4zxx("fbgt") - -proc cmf8zxx example cmf zlt -with FD_REG FD_REG - gen fcmp %1,%2 - bxx* {llabel, $2} - -pat cmf zlt $1==8 call cmf8zxx("fblt") -pat cmf zle $1==8 call cmf8zxx("fble") -pat cmf zne $1==8 call cmf8zxx("fbne") -pat cmf zeq $1==8 call cmf8zxx("fbeq") -pat cmf zge $1==8 call cmf8zxx("fbge") -pat cmf zgt $1==8 call cmf8zxx("fbgt") -#endif - - -proc loc1locciibxx example loc loc cii bne -with any1 extend1 STACK - gen cmp_b %1,%2 - bxx[1] {llabel, $4} -with any1 any_int STACK - uses reusing %1, DD_REG = %1 -#if TBL68020 && WORD_SIZE==4 - gen extb_l %a -#else - gen ext_w %a -#if WORD_SIZE==4 - ext_l %a -#endif -#endif - cmp_i %2,%a - bxx[2] {llabel, $4} - -pat loc loc cii blt $1==1 && $2==EM_WSIZE call loc1locciibxx("blt","bgt") -pat loc loc cii ble $1==1 && $2==EM_WSIZE call loc1locciibxx("ble","bge") -pat loc loc cii bne $1==1 && $2==EM_WSIZE call loc1locciibxx("bne","bne") -pat loc loc cii beq $1==1 && $2==EM_WSIZE call loc1locciibxx("beq","beq") -pat loc loc cii bge $1==1 && $2==EM_WSIZE call loc1locciibxx("bge","ble") -pat loc loc cii bgt $1==1 && $2==EM_WSIZE call loc1locciibxx("bgt","blt") - -#if WORD_SIZE==4 -proc loc2locciibxx example loc loc cii bne -with any2 extend2 STACK - gen cmp_w %1,%2 - bxx[1] {llabel, $4} -with any2 any4 STACK - uses reusing %1, DD_REG = %1 - gen ext_l %a - cmp_l %2,%a - bxx[2] {llabel, $4} - -pat loc loc cii blt $1==2 && $2==EM_WSIZE call loc2locciibxx("blt","bgt") -pat loc loc cii blt $1==2 && $2==EM_WSIZE call loc2locciibxx("blt","bgt") -pat loc loc cii ble $1==2 && $2==EM_WSIZE call loc2locciibxx("ble","bge") -pat loc loc cii bne $1==2 && $2==EM_WSIZE call loc2locciibxx("bne","bne") -pat loc loc cii beq $1==2 && $2==EM_WSIZE call loc2locciibxx("beq","beq") -pat loc loc cii bge $1==2 && $2==EM_WSIZE call loc2locciibxx("bge","ble") -pat loc loc cii bgt $1==2 && $2==EM_WSIZE call loc2locciibxx("bgt","blt") -#endif - -proc bxx1_in example loc loc cii loc bne -with imm_cmp1 STACK - gen cmp_b {const, low8($4)}, %1 - bxx* {llabel, $5} - -#if WORD_SIZE!=2 -proc bxx2_in example loc loc cii loc bne -with imm_cmp2 STACK - gen cmp_w {const, loww($4)}, %1 - bxx* {llabel, $5} -#endif - -proc bxx1_small example loc bne -with imm_cmp1-D_REG STACK - gen cmp_b {const, $1}, %1 - bxx[1] {llabel, $2} -with imm_cmp2-D_REG STACK - gen cmp_w {const, $1}, %1 - bxx[1] {llabel, $2} -with data_int STACK -uses DD_REG = {small_const, $1} /* uses moveq */ - gen cmp_i %1,%a - bxx[2] {llabel, $2} - -#if WORD_SIZE!=2 -proc bxx2_small example loc bne -with imm_cmp2-D_REG STACK - gen cmp_w {const, $1}, %1 - bxx[1] {llabel, $2} -with imm_cmp4 STACK - gen cmp_l {const, $1}, %1 - bxx[2] {llabel, $2} -#endif - -proc zxx1_in example loc loc cii zne -with test_set1 STACK - gen test %1 - bxx* {llabel, $4} -with D_REG STACK - gen test {dreg1, %1} - bxx* {llabel, $4} - -#if WORD_SIZE!=2 -proc zxx2_in example loc loc cii zne -with test_set2 STACK - gen test %1 - bxx* {llabel, $4} -with D_REG STACK - gen test {dreg2, %1} - bxx* {llabel, $4} -#endif - -pat loc loc cii zlt $1==1 && $2==WORD_SIZE call zxx1_in("blt") -pat loc loc cii zle $1==1 && $2==WORD_SIZE call zxx1_in("ble") -pat loc loc cii zne $1==1 && $2==WORD_SIZE call zxx1_in("bne") -pat loc loc cii zeq $1==1 && $2==WORD_SIZE call zxx1_in("beq") -pat loc loc cii zge $1==1 && $2==WORD_SIZE call zxx1_in("bge") -pat loc loc cii zgt $1==1 && $2==WORD_SIZE call zxx1_in("bgt") - -#if WORD_SIZE!=2 -pat loc loc cii zlt $1==2 && $2==4 call zxx2_in("blt") -pat loc loc cii zle $1==2 && $2==4 call zxx2_in("ble") -pat loc loc cii zne $1==2 && $2==4 call zxx2_in("bne") -pat loc loc cii zeq $1==2 && $2==4 call zxx2_in("beq") -pat loc loc cii zge $1==2 && $2==4 call zxx2_in("bge") -pat loc loc cii zgt $1==2 && $2==4 call zxx2_in("bgt") -#endif - -pat loc loc cii loc blt $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("blt") -pat loc loc cii loc ble $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("ble") -pat loc loc cii loc beq $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("beq") -pat loc loc cii loc bne $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bne") -pat loc loc cii loc bge $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bge") -pat loc loc cii loc bgt $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bgt") - -#if WORD_SIZE!=2 -pat loc loc cii loc blt $1==2 && $2==4 && in_2($4) call bxx2_in("blt") -pat loc loc cii loc ble $1==2 && $2==4 && in_2($4) call bxx2_in("ble") -pat loc loc cii loc beq $1==2 && $2==4 && in_2($4) call bxx2_in("beq") -pat loc loc cii loc bne $1==2 && $2==4 && in_2($4) call bxx2_in("bne") -pat loc loc cii loc bge $1==2 && $2==4 && in_2($4) call bxx2_in("bge") -pat loc loc cii loc bgt $1==2 && $2==4 && in_2($4) call bxx2_in("bgt") -#endif - -/* the second instruction for bxx1_small is the other way around! */ -pat loc blt $1>=0 && $1<128 call bxx1_small("bcs", "bgt") -pat loc ble $1>=0 && $1<128 call bxx1_small("bls", "bge") -pat loc beq $1>=0 && $1<128 call bxx1_small("beq", "beq") -pat loc bne $1>=0 && $1<128 call bxx1_small("bne", "bne") -pat loc bge $1>=0 && $1<128 call bxx1_small("bcc", "ble") -pat loc bgt $1>=0 && $1<128 call bxx1_small("bhi", "blt") - -#if WORD_SIZE!=2 -pat loc blt $1>=128 && $1<32768 call bxx2_small("bcs", "blt") -pat loc ble $1>=128 && $1<32768 call bxx2_small("bls", "ble") -pat loc beq $1>=128 && $1<32768 call bxx2_small("beq", "beq") -pat loc bne $1>=128 && $1<32768 call bxx2_small("bne", "bne") -pat loc bge $1>=128 && $1<32768 call bxx2_small("bcc", "bge") -pat loc bgt $1>=128 && $1<32768 call bxx2_small("bhi", "bgt") -#endif - - -pat loc loc cii lal sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lal $4 sti $5 -pat loc loc cii lol sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lol $4 sti $5 -pat loc loc cii lil sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lil $4 sti $5 -pat loc loc cii LLP lof sti $1 <= WORD_SIZE && $1>=$6 && $2==WORD_SIZE - leaving LLP $4 lof $5 sti $6 -pat loc loc cii lae sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lae $4 sti $5 -pat loc loc cii loe sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving loe $4 sti $5 - -pat loc loc cii stl $1==1 && $2==WORD_SIZE && inreg($4)==reg_any -with memory1+DD_REG - kills regvar($4, reg_any), use_index %xreg==regvar($4, reg_any) - gen move_b %1, {dreg1, regvar($4,reg_any)} -#if WORD_SIZE==2 - ext_w {LOCAL,$4} -#else -#ifdef TBL68020 - extb_l {LOCAL,$4} -#else /* TBL68020 */ - ext_w {LOCAL,$4} - ext_l {LOCAL,$4} -#endif /* TBL68020 */ -#endif - -pat loc loc cii $1==2 && $2==4 -#if WORD_SIZE==2 -with D_REG -uses reusing %1, DD_REG4 - gen move %1,%a.1 yields {extend2, %a} -with exact extend1 - uses reusing %1,DD_REG4 - gen move %1.reg,%a.1 yields {extend1_4, %a} -with exact memory2 -uses reusing %1,DD_REG4 - gen move %1, %a.1 yields {extend2, %a} -#else -with DD_REG yields {extend2, %1} -with exact memory2 -uses reusing %1,DD_REG=%1 - yields {extend2, %a} -#endif - -pat loc loc cii $1==1 && $2==WORD_SIZE -with DD_REG yields {extend1, %1} -with exact memory1 -uses reusing %1,DD_REG = %1 - yields {extend1, %a} - -#if WORD_SIZE==2 -pat loc loc cii $1==1 && $2==4 -with DD_REG -uses reusing %1, DD_REG4 - gen move %1, %a.1 - yields {extend1_4, %a} -with exact memory1 -uses reusing %1,DD_REG4 - gen move %1,%a.1 yields {extend1_4, %a} -#endif - -pat loc loc ciu $1==$2 /* skip this */ -pat loc loc cui $1==$2 /* skip this */ - - -/* The following rules should be handled by the peephole optimizer, I think */ - -#if WORD_SIZE==2 -pat ldc dvu highw($1)==0 && loww($1)==2 && $2==4 leaving loc 1 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==4 && $2==4 leaving loc 2 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==8 && $2==4 leaving loc 3 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==16 && $2==4 leaving loc 4 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==32 && $2==4 leaving loc 5 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==64 && $2==4 leaving loc 6 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==128 && $2==4 leaving loc 7 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==256 && $2==4 leaving loc 8 sru 4 -#endif - -pat loc dvu $1==2 && $2==WORD_SIZE leaving loc 1 sru WORD_SIZE -pat loc dvu $1==4 && $2==WORD_SIZE leaving loc 2 sru WORD_SIZE -pat loc dvu $1==8 && $2==WORD_SIZE leaving loc 3 sru WORD_SIZE -pat loc dvu $1==16 && $2==WORD_SIZE leaving loc 4 sru WORD_SIZE -pat loc dvu $1==32 && $2==WORD_SIZE leaving loc 5 sru WORD_SIZE -pat loc dvu $1==64 && $2==WORD_SIZE leaving loc 6 sru WORD_SIZE -pat loc dvu $1==128 && $2==WORD_SIZE leaving loc 7 sru WORD_SIZE -pat loc dvu $1==256 && $2==WORD_SIZE leaving loc 8 sru WORD_SIZE - -#if WORD_SIZE==2 -pat ldc dvi highw($1)==0 && loww($1)==2 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 1 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==4 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 2 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==8 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 3 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==16 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 4 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==32 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 5 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==64 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 6 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==128 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 7 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==256 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 8 sri 4 -#endif /* WORD_SIZE==2 */ - -pat loc dvi $1==2 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 1 sri WORD_SIZE - -pat loc dvi $1==4 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 2 sri WORD_SIZE - -pat loc dvi $1==8 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 3 sri WORD_SIZE - -pat loc dvi $1==16 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 4 sri WORD_SIZE - -pat loc dvi $1==32 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 5 sri WORD_SIZE - -pat loc dvi $1==64 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 6 sri WORD_SIZE - -pat loc dvi $1==128 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 7 sri WORD_SIZE - -pat loc dvi $1==256 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 8 sri WORD_SIZE - -/* The rest is all 2-bytes stuff */ -#if WORD_SIZE==2 -pat loc loc cii $1==4 && $2==2 -with D_REG4 - yields %1.1 -with any2-pre_post any2-pre_post - yields %2 - -proc cmqtxx -with exact sconsts4 any4 - uses DD_REG4=%1 - gen cmp_l %2, %a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact any4 sconsts4 - uses DD_REG4=%2 - gen cmp_l %1, %a - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with any4-sconsts4 genreg4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_l %1, %2 - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with genreg4 any4-sconsts4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_l %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact extend1_4 extend1_4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_b %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact extend2 extend2 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_w %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact immediate4-sconsts4 imm_cmp4 - uses reusing %2,DD_REG4 - gen cmp_l %1, %2 - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact imm_cmp4 immediate4-sconsts4 - uses reusing %1,DD_REG4 - gen cmp_l %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact immediate4-sconsts4 STACK - uses DD_REG4 - gen cmp_l %1, {post_inc4, sp} - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen cmp_l {post_inc4, sp}, %a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact STACK - uses DD_REG4 - gen move_l {post_inc4, sp},%a - cmp_l {post_inc4, sp},%a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} - -pat cmi tlt $1==4 call cmqtxx("slt","sgt") -pat cmi tle $1==4 call cmqtxx("sle","sge") -pat cmi teq $1==4 call cmqtxx("seq","seq") -pat cmi tne $1==4 call cmqtxx("sne","sne") -pat cmi tge $1==4 call cmqtxx("sge","sle") -pat cmi tgt $1==4 call cmqtxx("sgt","slt") - -pat cmu tlt $1==4 call cmqtxx("scs","shi") -pat cmu tle $1==4 call cmqtxx("sls","scc") -pat cmu teq $1==4 call cmqtxx("seq","seq") -pat cmu tne $1==4 call cmqtxx("sne","sne") -pat cmu tge $1==4 call cmqtxx("scc","sls") -pat cmu tgt $1==4 call cmqtxx("shi","scs") - - -proc cmqzxx example cmu zlt -with zero_const4 test_set4 STACK - /* kills ALL */ - gen test %2 - bxx[1] {llabel, $2} -with exact sconsts4-zero_const4 any4 - kills ALL - uses DD_REG4=%1 - gen cmp_l %2, %a - bxx[2] {llabel, $2} -with exact any4 sconsts4 - kills ALL - uses DD_REG4=%2 - gen cmp_l %1, %a - bxx[1] {llabel, $2} -with any4-sconsts4-zero_const4 genreg4 STACK - gen cmp_l %1, %2 - bxx[1] {llabel, $2} -with genreg4 any4-sconsts4-zero_const4 STACK - gen cmp_l %2, %1 - bxx[2] {llabel, $2} -with exact immediate4-sconsts4-zero_const4 imm_cmp4 - kills ALL - gen cmp_l %1, %2 - bxx[1] {llabel, $2} -with exact imm_cmp4 immediate4-sconsts4-zero_const4 - kills ALL - gen cmp_l %2, %1 - bxx[2] {llabel, $2} -with exact immediate4-sconsts4-zero_const4 STACK - gen cmp_l %1, {post_inc4, sp} - bxx[1] {llabel, $2} -with exact any4 STACK - uses reusing %1, DD_REG4=%1 - gen cmp_l {post_inc4, sp}, %a - bxx[2] {llabel, $2} -with exact STACK - uses DD_REG4 - gen move_l {post_inc4, sp},%a - cmp_l {post_inc4, sp},%a - bxx[2] {llabel, $2} -with data2-sconsts dreg2 STACK - gen cmp_w %1, %2 - bxx[1] {llabel, $2} -with dreg2 data2-conreg2-sconsts STACK - gen cmp_w %2, %1 - bxx[2] {llabel, $2} -with data1 dreg1 STACK - gen cmp_b %1, %2 - bxx[1] {llabel, $2} -with dreg1 data1-conreg1 STACK - gen cmp_b %2, %1 - bxx[2] {llabel, $2} - -pat cmi zlt $1==4 call cmqzxx("blt","bgt") -pat cmi zle $1==4 call cmqzxx("ble","bge") -pat cmi zeq $1==4 call cmqzxx("beq","beq") -pat cmi zne $1==4 call cmqzxx("bne","bne") -pat cmi zge $1==4 call cmqzxx("bge","ble") -pat cmi zgt $1==4 call cmqzxx("bgt","blt") - -pat cms zeq $1==4 call cmqzxx("beq","beq") -pat cms zne $1==4 call cmqzxx("bne","bne") - -pat cmu zlt $1==4 call cmqzxx("bcs","bhi") -pat cmu zle $1==4 call cmqzxx("bls","bcc") -pat cmu zeq $1==4 call cmqzxx("beq","beq") -pat cmu zne $1==4 call cmqzxx("bne","bne") -pat cmu zge $1==4 call cmqzxx("bcc","bls") -pat cmu zgt $1==4 call cmqzxx("bhi","bcs") - -pat ldc cms zeq loww($1)==0 && highw($1)==0 && $2==4 -with test_set4 STACK - gen test %1 - beq {llabel, $3} - -pat ldc cms zne loww($1)==0 && highw($1)==0 && $2==4 -with test_set4 STACK - gen test %1 - bne {llabel, $3} -#endif diff --git a/mach/m68k2/ncg/table_link b/mach/m68k2/ncg/table_link deleted file mode 100644 index 226ca8c26..000000000 --- a/mach/m68k2/ncg/table_link +++ /dev/null @@ -1 +0,0 @@ -TABLE = mach/m68020/ncg/table diff --git a/mach/m68k2/top/Makefile b/mach/m68k2/top/Makefile deleted file mode 100644 index 57908427f..000000000 --- a/mach/m68k2/top/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -EMHOME=../../.. -LIBS=$(EMHOME)/modules/lib/libstring.a -PREFLAGS=-I. -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -DNDEBUG -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -CDIR=$(EMHOME)/mach/proto/top -CFILES=$(CDIR)/top.c $(CDIR)/queue.c -OFILES=top.o queue.o - -all: gen.c - make top - -top: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LIBS) -o top - -top.o: $(CDIR)/top.c gen.c - $(CC) -c $(CFLAGS) $(CDIR)/top.c - -queue.o: $(CDIR)/queue.c - $(CC) -c $(CFLAGS) $(CDIR)/queue.c - -install: all - $(EMHOME)/mach/install top - -cmp: all - -$(EMHOME)/mach/compare top - -gen.c: table - $(EMHOME)/lib/topgen table - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) - -clean: - rm -f *.o gen.c gen.h top - -top.o: gen.h -top.o: $(CDIR)/top.h -top.o: $(CDIR)/queue.h -queue.o: $(CDIR)/queue.h diff --git a/mach/m68k4/libem/Makefile b/mach/m68k4/libem/Makefile deleted file mode 100644 index 5457c453c..000000000 --- a/mach/m68k4/libem/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# $Header$ -MACH=m68k4 -ASAR=aal -all: libem_o.a end.a - -install: all - ../../install libem_o.a tail_em - ../../install end.a end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.a end_em - -end.a: em_end.s etext.s edata.s end.s - $(MACH) -I../../../h -c em_end.s - $(MACH) -I../../../h -c edata.s - $(MACH) -I../../../h -c etext.s - $(MACH) -I../../../h -c end.s - $(ASAR) cr end.a em_end.o etext.o edata.o end.o - -libem_o.a: libem_s.a - ASAR=$(ASAR) ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a end.a - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/em_end.s `pwd`/edata.s `pwd`/etext.s `pwd`/end.s diff --git a/mach/m68k4/libem/aciaio.s b/mach/m68k4/libem/aciaio.s deleted file mode 100644 index 09577e1fd..000000000 --- a/mach/m68k4/libem/aciaio.s +++ /dev/null @@ -1,36 +0,0 @@ -.define .outch1,.outch2,.inch1,.inch2 -.sect .text -.sect .rom -.sect .data -.sect .bss - - ! a0,d0 used - ! character in d1 - - .sect .text -.inch1: - move.l #acia1,a0 - bra .inch -.inch2: - move.l #acia2,a0 -.inch: - move.b (a0),d1 - asr #1,d1 - bcc .inch - move.b 2(a0),d1 - and #0x7f,d1 - rts - -.outch1: - move.l #acia1,a0 - bra .outch -.outch2: - move.l #acia2,a0 -.outch: - move.b (a0),d0 - asr #2,d0 - bcc .outch - move.b d1,2(a0) - rts - -.align 2 diff --git a/mach/m68k4/libem/ara.s b/mach/m68k4/libem/ara.s deleted file mode 100644 index e4e9ab195..000000000 --- a/mach/m68k4/libem/ara.s +++ /dev/null @@ -1,101 +0,0 @@ -.define .sar -.define .lar -.define .aar -.sect .text -.sect .rom -.sect .data -.sect .bss - - !register usage: - ! a0 : descriptor address - ! d0 : index - ! a1 : base address - .sect .text -.aar: - move.l 4(sp),a0 ! descriptor address - move.l 8(sp),d0 ! index - sub.l (a0),d0 ! index - lower bound : relative index - move.l 8(a0),-(sp) ! # bytes / element - move.l d0,-(sp) - jsr .mlu - move.l 12(sp),a1 ! base address - add.l d1,a1 ! address of element - move.l (sp)+,a0 ! return address - add.l #8,sp ! pop arguments - move.l a1,(sp) ! returned on stack - jmp (a0) - -.lar: - ! register usage: like .aar - - move.l 4(sp),a0 - move.l 8(sp),d0 - move.l 12(sp),a1 - sub.l (a0),d0 - move.l d0,-(sp) - move.l 8(a0),-(sp) - jsr .mlu - move.l 12(sp),a1 - move.l 4(sp),a0 - add.l d1,a1 ! address of element - move.l 8(a0),d0 - add.l d0,a1 ! a1++ because of predecrement - move.l (sp)+,a0 ! return address - add.l #12,sp ! pop parameters - clr.l d1 !?nodig? - asr #1,d0 - bne 3f - move.b -(a1),d1 ! 1 byte element - move.l d1,-(sp) - bra 5f -3: - asr #1,d0 - bne 4f - move.w -(a1),d1 ! 2 byte element - move.l d1,-(sp) - bra 5f -4: - sub.l #1,d0 -1: - move.l -(a1),-(sp) ! 4n byte element (n = 1,2,...) - dbf d0,1b -5: - jmp (a0) - -.sar: - !register usage: same as lar - - move.l 4(sp),a0 - move.l 8(sp),d0 - move.l 12(sp),a1 - sub.l (a0),d0 - move.l d0,-(sp) - move.l 8(a0),-(sp) - jsr .mlu - move.l 12(sp),a1 - move.l 4(sp),a0 - add.l d1,a1 - move.l 8(a0),d0 ! # bytes / element - move.l (sp)+,a0 ! return address - add.l #12,sp ! pop parameters - clr.l d1 !?nodig? - asr #1,d0 - bne 3f - move.l (sp)+,d1 - move.b d1,(a1) ! 1 byte element - bra 4f -3: - asr #1,d0 - bne 5f - move.l (sp)+,d1 - move.w d1,(a1) ! 2 byte element - bra 4f -5: - sub.l #1,d0 -1: - move.l (sp)+,(a1)+ ! 4n byte element (n = 1,2,...) - dbf d0,1b -4: - jmp (a0) - -.align 2 diff --git a/mach/m68k4/libem/ari.s b/mach/m68k4/libem/ari.s deleted file mode 100644 index cefb0f663..000000000 --- a/mach/m68k4/libem/ari.s +++ /dev/null @@ -1,36 +0,0 @@ -.define .sari -.define .lari -.define .aari -.sect .text -.sect .rom -.sect .data -.sect .bss - - .sect .text -.aari: - move.l (sp)+,d0 ! return address - cmp.l #4, (sp)+ ! size of descriptor elements - bne 9f - move.l d0,-(sp) - jmp .aar - - -.lari: - move.l (sp)+,d0 ! return address - cmp.l #4, (sp)+ ! size of descriptor elements - bne 9f - move.l d0,-(sp) - jmp .lar -9: - move.w #EILLINS,-(sp) - jmp .fat - - -.sari: - move.l (sp)+,d0 ! return address - cmp.l #4, (sp)+ ! size of descriptor elements - bne 9b - move.l d0,-(sp) - jmp .sar - -.align 2 diff --git a/mach/m68k4/libem/compmodule b/mach/m68k4/libem/compmodule deleted file mode 100755 index 80f42aab3..000000000 --- a/mach/m68k4/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if m68k4 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/m68k4/libem/cvf.s b/mach/m68k4/libem/cvf.s deleted file mode 100644 index 74dcc928c..000000000 --- a/mach/m68k4/libem/cvf.s +++ /dev/null @@ -1,21 +0,0 @@ -.define .cfi,.cif,.cfu,.cuf,.cff -.sect .text -.sect .rom -.sect .data -.sect .bss - - .sect .text - - ! this is a dummy float conversion routine -.cfi: -.cif: -.cfu: -.cuf: -.cff: - move.l (sp)+,a0 ! return address - move (sp)+,d0 ! destination size - sub (sp)+,d0 ! diff. in sizes - sub d0,sp - jmp (a0) - -.align 2 diff --git a/mach/m68k4/libem/edata.s b/mach/m68k4/libem/edata.s deleted file mode 100644 index f53adc109..000000000 --- a/mach/m68k4/libem/edata.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _edata -.sect .data - .align 4 - .sect .data -_edata: diff --git a/mach/m68k4/libem/em_end.s b/mach/m68k4/libem/em_end.s deleted file mode 100644 index a062368da..000000000 --- a/mach/m68k4/libem/em_end.s +++ /dev/null @@ -1,22 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define endtext,enddata,endbss,__end -.sect .text - .align 4 -.sect .rom - .align 4 -.sect .data - .align 4 -.sect .bss - .align 4 -.sect .end ! only for declaration of _end, __end and endbss. - - .sect .text -endtext: - .sect .data -enddata: - .sect .end -__end: -endbss: diff --git a/mach/m68k4/libem/end.s b/mach/m68k4/libem/end.s deleted file mode 100644 index 93a1e6e00..000000000 --- a/mach/m68k4/libem/end.s +++ /dev/null @@ -1,7 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _end -.sect .end ! only for declaration of _end, __end and endbss. -_end: diff --git a/mach/m68k4/libem/etext.s b/mach/m68k4/libem/etext.s deleted file mode 100644 index 8c7453cb4..000000000 --- a/mach/m68k4/libem/etext.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _etext -.sect .text - .align 4 - .sect .text -_etext: diff --git a/mach/m68k4/libem/fakfp.s b/mach/m68k4/libem/fakfp.s deleted file mode 100644 index 1c039b655..000000000 --- a/mach/m68k4/libem/fakfp.s +++ /dev/null @@ -1,39 +0,0 @@ -.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8 -.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8 -.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8 -.define .cmf4, .cmf8 -.sect .text -.sect .rom -.sect .data -.sect .bss - -! $Header$ - - .sect .text -.adf4: -.adf8: -.sbf4: -.sbf8: -.mlf4: -.mlf8: -.dvf4: -.dvf8: -.ngf4: -.ngf8: -.fif4: -.fif8: -.fef4: -.fef8: -.cif4: -.cif8: -.cuf4: -.cuf8: -.cfi: -.cfu: -.cff4: -.cff8: -.cmf4: -.cmf8: - move.l #18,-(sp) - jsr .trp - rts diff --git a/mach/m68k4/libem/printf.s b/mach/m68k4/libem/printf.s deleted file mode 100644 index b0fcbe9d3..000000000 --- a/mach/m68k4/libem/printf.s +++ /dev/null @@ -1,88 +0,0 @@ -.define _printf -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .bss -_getal: - .space 12 -_char: - .space 1 - .align 4 -.sect .data -hexs: - .ascii "0123456789abcdef" - .align 4 -.sect .text -_printf: - movem.l d0/d1/d2/a0/a1/a2/a3/a4/a5/a6, -(sp) - lea 44(sp), a6 ! a6 <- address of arguments - move.l (a6)+, a5 ! a5 <- address of format -next: move.b (a5)+, d0 - beq out - cmp.b #'%', d0 - beq procnt -put: move.l d0, -(sp) - jsr _putchar ! long argument on stack - tst.l (sp)+ - bra next - -procnt: move.b (a5)+, d0 - cmp.b #'d', d0 ! NOTE: %d means unsigned. - beq digit - cmp.b #'x', d0 - beq hex - cmp.b #'s', d0 - beq string - cmp.b #'%', d0 ! second % has to be printed. - beq put - tst.b -(a5) ! normal char should be printed - bra next - -string: move.l (a6)+, a2 ! a2 <- address of string -sloop: move.b (a2)+, d0 - beq next - move.l d0, -(sp) - jsr _putchar ! long argument on stack - tst.l (sp)+ - bra sloop - -digit: move.l (a6)+, d1 ! d1 <- integer - move.l #_getal+12, a2 ! a2 <- ptr to last part of buf - clr.b -(a2) ! stringterminator -1: - move.l d1,-(sp) - move.l #10,-(sp) - jsr .dvu ! d1 <- qotient; d0 <- remainder - add.l #'0', d0 - move.b d0, -(a2) - tst.l d1 ! if quotient = 0 then ready - bne 1b - bra sloop ! print digitstring. - -hex: move.l (a6)+, d1 ! d1 <- integer - move.l #_getal+12, a2 ! a2 <- ptr to last part of buf - clr.b -(a2) ! stringterminator - move.l #7, d2 ! loop control -1: move.l d1, d0 - and.l #15, d0 - move.l #hexs,a0 - add.l d0,a0 - move.b (a0), -(a2) ! hex digit - asr.l #4, d1 - dbf d2, 1b - bra sloop - -out: - movem.l (sp)+, d0/d1/d2/a0/a1/a2/a3/a4/a5/a6 - rts - - -_putchar: - move.l #1, -(sp) - pea 11(sp) - move.l #1, -(sp) - jsr _write - lea 12(sp), sp - rts -.align 2 diff --git a/mach/m68k4/libem/sav.s b/mach/m68k4/libem/sav.s deleted file mode 100644 index 5f29178c0..000000000 --- a/mach/m68k4/libem/sav.s +++ /dev/null @@ -1,13 +0,0 @@ -.define .savd0 -.define .savret -.define .savreg - -.data -.savd0: - .long 0 -.savret: - .long 0 -.savreg: - .space 128 -.text -.align 2 diff --git a/mach/m68k4/libem/sys1.s b/mach/m68k4/libem/sys1.s deleted file mode 100644 index 49a3d7590..000000000 --- a/mach/m68k4/libem/sys1.s +++ /dev/null @@ -1,62 +0,0 @@ -.extern _errno -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .data -_errno: -.extern _lseek -.short 0 -.sect .text -_lseek: -link a6,#-0 -.sect .data -_13: -.short 29561 -.short 29489 -.short 11875 -.short 0 -.sect .text -move.l #_13,.filn -move.w #8,.lino -move.w #0,-(sp) -move.w #0,-(sp) -move.l (sp)+,d0 -unlk a6 -rts -.extern _close -_close: -link a6,#-0 -move.l #_13,.filn -move.w #12,.lino -move.w #0,-(sp) -move.w (sp)+,d0 -unlk a6 -rts -.extern _ioctl -_ioctl: -link a6,#-0 -move.l #_13,.filn -move.w #18,.lino -move.w #0,-(sp) -move.w (sp)+,d0 -unlk a6 -rts -.extern _read -_read: -link a6,#-0 -move.l #_13,.filn -move.w #24,.lino -move.w #-1,-(sp) -move.w (sp)+,d0 -unlk a6 -rts -.extern _open -_open: -link a6,#-0 -move.l #_13,.filn -move.w #30,.lino -move.w #-1,-(sp) -move.w (sp)+,d0 -unlk a6 -rts diff --git a/mach/m68k4/libem/sys2.s b/mach/m68k4/libem/sys2.s deleted file mode 100644 index 661f2fb57..000000000 --- a/mach/m68k4/libem/sys2.s +++ /dev/null @@ -1,11 +0,0 @@ -.extern _exit -.sect .text -.sect .rom -.sect .data -.sect .bss -! Fake system call for 68000 running MACSBUG - -.sect .text - -_exit: - jmp 0x0200f6 diff --git a/mach/m68k4/libfp/Makefile b/mach/m68k4/libfp/Makefile deleted file mode 100644 index 370c22bce..000000000 --- a/mach/m68k4/libfp/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. -SUF=o -MAKEFILE=$(EMHOME)/mach/proto/fp/Makefile -MACHDEF="MACH=m68k4" "SUF=$(SUF)" "ASAR=aal" - -all: - make -f $(MAKEFILE) $(MACHDEF) all - -install: - make -f $(MAKEFILE) $(MACHDEF) install - -cmp: all - -../../compare FP_$(MACH).a tail_fp - -clean: - make -f $(MAKEFILE) $(MACHDEF) clean - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/m68k4/libsys/Makefile b/mach/m68k4/libsys/Makefile deleted file mode 100644 index 142afee5a..000000000 --- a/mach/m68k4/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=m68k4 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/m68k4/libsys/compmodule b/mach/m68k4/libsys/compmodule deleted file mode 100755 index d80f03d43..000000000 --- a/mach/m68k4/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if m68k4 -L -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/m68k4/ncg/Makefile b/mach/m68k4/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/m68k4/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/m68k4/ncg/README b/mach/m68k4/ncg/README deleted file mode 100644 index 1849c66e5..000000000 --- a/mach/m68k4/ncg/README +++ /dev/null @@ -1,11 +0,0 @@ -The file 'table' in this directory contains a back end table for the -MC68020 processor as well as one for the MC68000. Both tables use 2 or 4 bytes -for words and 4 bytes for pointers. The table must be preprocessed first -by the C preprocessor. -The file "whichone.h" specifies which code generator is generated: -it #defines either TBL68000 or TBL86020, and it defines WORD_SIZE to either -2 or 4. -The m68k4(TBL68000) cg can very well be used for the MC68010 processor, -for it makes rather efficient use of the 68010 loop mode. - -The mach.[ch] files are also suitable for both the m68020 and the m68k[24]. diff --git a/mach/m68k4/ncg/instrmacs.h b/mach/m68k4/ncg/instrmacs.h deleted file mode 100644 index b3d2b1649..000000000 --- a/mach/m68k4/ncg/instrmacs.h +++ /dev/null @@ -1,144 +0,0 @@ -#if WORD_SIZE==2 -#define LLP ldl -#define LEP lde -#define LFP ldf /* load offsetted pointer */ -#define SLP sdl -#define SEP sde -#define SFP sdf /* store offsetted pointer */ - -#define ABS_off_int ABS_off2 -#define ABS_indoff_int ABS_indoff2 -#define ABSIND_off_int ABSIND_off2 -#define INDOFF_off_int INDOFF_off2 -#define OFF_off_int OFF_off2 -#define OFF_indoff_int OFF_indoff2 -#define abs_index_int abs_index2 -#define absolute_int absolute2 -#define any_int any2 -#define conreg_int conreg2 -#define data_int data2 -#define datalt_int datalt2 -#define dreg_int dreg2 -#define imm_cmp_int imm_cmp2 -#define immediate_int immediate2 -#define indirect_int indirect2 -#define index_off_int index_off2 -#define offsetted_int offsetted2 -#define post_inc_int post_inc2 -#define pre_dec_int pre_dec2 -#define store_int any2 -#define test_set_int test_set2 - -#define add_i add_w -#define ADD_I "add.w" -#define and_i and_w -#define AND_I "and.w" -#define asl_i asl_w -#define ASL_I "asl.w" -#define asr_i asr_w -#define ASR_I "asr.w" -#define clr_i clr_w -#define CLR_I "clr.w" -#define cmp_i cmp_w -#define cmp2_i cmp2_w -#define DEC "sub.w #1," -#define DIVS_I "divs.w" -#define DIVU_I "divu.w" -#define eor_i eor_w -#define EOR_I "eor.w" -#define INC "add.w #1," -#define lsr_i lsr_w -#define LSR_I "lsr.w" -#define move_i move_w -#define MOVE_I "move.w" -#define muls_i muls_w -#define MULS_I "muls.w" -#define mulu_i mulu_w -#define MULU_I "mulu.w" -#define neg_i neg_w -#define NEG_I "neg.w" -#define not_i not_w -#define NOT_I "not.w" -#define or_i or_w -#define OR_I "or.w" -#define rol_i rol_w -#define ROL_I "rol.w" -#define ror_i ror_w -#define ROR_I "ror.w" -#define sub_i sub_w -#define SUB_I "sub.w" -#define tst_i tst_w - -#else - -#define LLP lol -#define LEP loe -#define LFP lof /* load offsetted pointer */ -#define SLP stl -#define SEP ste -#define SFP stf /* store offsetted pointer */ - -#define ABS_off_int ABS_off4 -#define ABS_indoff_int ABS_indoff4 -#define ABSIND_off_int ABSIND_off4 -#define INDOFF_off_int INDOFF_off4 -#define OFF_off_int OFF_off4 -#define OFF_indoff_int OFF_indoff4 -#define abs_index_int abs_index4 -#define absolute_int absolute4 -#define any_int any4 -#define conreg_int conreg4 -#define data_int data4 -#define datalt_int datalt4 -#define dreg_int dreg4 -#define imm_cmp_int imm_cmp4 -#define immediate_int immediate4 -#define indirect_int indirect4 -#define index_off_int index_off4 -#define offsetted_int offsetted4 -#define post_inc_int post_inc4 -#define pre_dec_int pre_dec4 -#define store_int store4 -#define test_set_int test_set4 - -#define add_i add_l -#define ADD_I "add.l" -#define and_i and_l -#define AND_I "and.l" -#define asl_i asl_l -#define ASL_I "asl.l" -#define asr_i asr_l -#define ASR_I "asr.l" -#define clr_i clr_l -#define CLR_I "clr.l" -#define cmp_i cmp_l -#define cmp2_i cmp2_l -#define DEC "sub.l #1," -#define DIVS_I "divs.l" -#define DIVU_I "divu.l" -#define eor_i eor_l -#define EOR_I "eor.l" -#define INC "add.l #1," -#define lsr_i lsr_l -#define LSR_I "lsr.l" -#define move_i move_l -#define MOVE_I "move.l" -#define muls_i muls_l -#define MULS_I "muls.l" -#define mulu_i mulu_l -#define MULU_I "mulu.l" -#define neg_i neg_l -#define NEG_I "neg.l" -#define not_i not_l -#define NOT_I "not.l" -#define or_i or_l -#define OR_I "or.l" -#define rol_i rol_l -#define ROL_I "rol.l" -#define ror_i ror_l -#define ROR_I "ror.l" -#define sub_i sub_l -#define SUB_I "sub.l" -#define tst_i tst_l - -#endif diff --git a/mach/m68k4/ncg/mach.c b/mach/m68k4/ncg/mach.c deleted file mode 100644 index 6759772f7..000000000 --- a/mach/m68k4/ncg/mach.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - */ - -/* - * machine dependent back end routines for the Motorola 68000, 68010 or 68020 - */ - -#include - -#if TBL68020 -#define SYNTAX_68020 1 -#endif - -#include - -con_part(sz,w) register sz; word w; { - - while (part_size % sz) - part_size++; - if (part_size == TEM_WSIZE) - part_flush(); - if (sz == 1) { - w &= 0xFF; -#if WORD_SIZE==4 - w <<= 8*(3-part_size); - part_word |= w; - } else if (sz == 2) { - w &= 0xFFFF; -#endif - if (part_size == 0) { - /* Shift 8 for m68k2, 16 otherwise */ - w <<= 4 * TEM_WSIZE; - } - part_word |= w; - } else { - assert(sz == TEM_WSIZE); - part_word = w; - } - part_size += sz; -} - -con_mult(sz) word sz; { - - if (sz != 4) - fatal("bad icon/ucon size"); - fprintf(codefile,".data4 %s\n",str); -} - -#define IEEEFLOAT -#define CODE_GENERATOR -#define FL_MSL_AT_LOW_ADDRESS 1 -#define FL_MSW_AT_LOW_ADDRESS 1 -#define FL_MSB_AT_LOW_ADDRESS 1 -#include - -regscore(off,size,typ,score,totyp) - long off; -{ - if (score == 0) return -1; - switch(typ) { - case reg_float: - return -1; - case reg_pointer: - if (size != 4 || totyp != reg_pointer) return -1; - score += (score >> 1); - break; - case reg_loop: - score += 5; - /* fall through .. */ - case reg_any: - if (size != TEM_WSIZE || totyp == reg_pointer) return -1; - break; - } - if (off >= 0) { - /* parameters must be initialised with an instruction - * like "move.l 4(a6),d0", which costs 2 words. - */ - score -= 2; - } - score--; /* save/restore */ - return score; -} -struct regsav_t { - char *rs_reg; /* e.g. "a3" or "d5" */ - long rs_off; /* offset of variable */ - int rs_size; /* 2 or 4 bytes */ -} regsav[9]; - - -int regnr; - -i_regsave() -{ - regnr = 0; -} - -full nlocals; - -regreturn() -{ - register struct regsav_t *p; - - if (regnr > 1) { -#ifdef SYNTAX_68020 - fprintf(codefile,"movem.l (-%ld,a6),", nlocals); -#else - fprintf(codefile,"movem.l -%ld(a6),", nlocals); -#endif - for (p = regsav; ;) { - fputs(p->rs_reg, codefile); - if (++p == ®sav[regnr]) break; - putc('/',codefile); - } - putc('\n',codefile); - } else if (regnr == 1) { - p = regsav; -#ifdef SYNTAX_68020 - fprintf(codefile,"move.l (-%ld,a6),%s\n",nlocals, p->rs_reg); -#else - fprintf(codefile,"move.l -%ld(a6),%s\n",nlocals, p->rs_reg); -#endif - } - fputs("unlk a6\nrts\n", codefile); -} - -f_regsave() -{ - register struct regsav_t *p; - - nlocals += regnr*4; -#ifdef TBL68020 - fprintf(codefile,"link\ta6,#-%ld\n",nlocals); -#else - if (nlocals > 32768) { - fprintf(codefile, "move.l a6,-(sp)\nmove.l sp,a6\nsub #%ld,sp\n", nlocals); - } - else fprintf(codefile,"link\ta6,#-%ld\n",nlocals); -#endif -#ifndef NOSTACKTEST - fprintf(codefile, "tst.b %s\n", -#ifdef SYNTAX_68020 - "(-40, sp)" -#else - "-40(sp)" -#endif - ); -#endif - if (regnr > 1) { - fputs("movem.l ", codefile); - for (p = regsav; ;) { - fputs(p->rs_reg, codefile); - if (++p == ®sav[regnr]) break; - putc('/',codefile); - } - fputs(",(sp)\n", codefile); - } else if (regnr == 1) { - p = regsav; - fprintf(codefile,"move.l %s,(sp)\n",p->rs_reg); - } - /* initialise register-parameters */ - for (p = regsav; p < ®sav[regnr]; p++) { - if (p->rs_off >= 0) { -#ifdef SYNTAX_68020 - fprintf(codefile,"move.%c (%ld,a6),%s\n", -#else - fprintf(codefile,"move.%c %ld(a6),%s\n", -#endif - (p->rs_size == 4 ? 'l' : 'w'), - p->rs_off, - p->rs_reg); - } - } -} - -regsave(s,off,size) - char *s; - long off; -{ - assert (regnr < 9); - regsav[regnr].rs_reg = s; - regsav[regnr].rs_off = off; - regsav[regnr++].rs_size = size; - fprintf(codefile, "!Local %ld into %s\n",off,s); -} - -prolog(n) full n; { - - nlocals = n; -} - -#ifdef MACH_OPTIONS -static int gdb_flag = 0; - -mach_option(s) - char *s; -{ - if (! strcmp(s, "-gdb")) { - gdb_flag = 1; - } - else { - error("Unknown flag %s", s); - } -} -#endif /* MACH_OPTIONS */ - -mes(type) word type ; { - int argt, a1, a2 ; - - switch ( (int)type ) { - case ms_ext : - for (;;) { - switch ( argt=getarg( - ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) { - case sp_cend : - return ; - default: - strarg(argt) ; - fprintf(codefile,".define %s\n",argstr) ; - break ; - } - } - case ms_stb: - argt = getarg(str_ptyp | cst_ptyp); - if (argt == sp_cstx) - fputs(".symb \"\", ", codefile); - else { - fprintf(codefile, ".symb \"%s\", ", str); - argt = getarg(cst_ptyp); - } - a1 = argval; - argt = getarg(cst_ptyp); - a2 = argval; - argt = getarg(cst_ptyp|nof_ptyp|sof_ptyp|ilb_ptyp|pro_ptyp); -#ifdef MACH_OPTIONS - if (gdb_flag) { - if (a1 == N_PSYM) { - /* Change offset from AB into offset from - the frame pointer. - */ - argval += 8; - } - } -#endif - fprintf(codefile, "%s, 0x%x, %d\n", strarg(argt), a1, a2); - argt = getarg(end_ptyp); - break; - case ms_std: - argt = getarg(str_ptyp | cst_ptyp); - if (argt == sp_cstx) - str[0] = '\0'; - else { - argt = getarg(cst_ptyp); - } - swtxt(); - if (argval == N_SLINE -#ifdef MACH_OPTIONS - && ! gdb_flag -#endif - ) { -#ifdef SYNTAX_68020 - fputs("jsr (___u_LiB)\n", codefile); -#else - fputs("jsr ___u_LiB\n", codefile); -#endif - cleanregs(); /* debugger might change variables */ - } - fprintf(codefile, ".symd \"%s\", 0x%x,", str, (int) argval); - argt = getarg(cst_ptyp); - fprintf(codefile, "%d\n", (int) argval); - argt = getarg(end_ptyp); - break; - default : - while ( getarg(any_ptyp) != sp_cend ) ; - break ; - } -} - - -char *segname[] = { - ".sect .text", /* SEGTXT */ - ".sect .data", /* SEGCON */ - ".sect .rom", /* SEGROM */ - ".sect .bss" /* SEGBSS */ -}; diff --git a/mach/m68k4/ncg/mach.h b/mach/m68k4/ncg/mach.h deleted file mode 100644 index 647a04322..000000000 --- a/mach/m68k4/ncg/mach.h +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include - -#ifndef TBL68020 -#ifndef TBL68000 -Something is very wrong here. You must specify the machine: either -TBL68000 or TBL68020, in the file whichone.h, then REMOVE tables.c -and then run "make" again -#endif -#endif -#if WORD_SIZE!=2 && WORD_SIZE!=4 -You must specify the appropriate word size, then REMOVE tables.c -#endif - -#define ex_ap(y) fprintf(codefile,".extern %s\n",y) -#define in_ap(y) /* nothing */ - -#define newilb(x) fprintf(codefile,"%s:\n",x) -#define newdlb(x) fprintf(codefile,"%s:\n",x) -#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y) -#define newlbss(l,x) fprintf(codefile,".comm %s,%ld\n",l,x); - -#define pop_fmt "(sp)+" -#define cst_fmt "%ld" -#define off_fmt "%ld" -#define ilb_fmt "I%x_%x" -#define dlb_fmt "I_%d" -#define hol_fmt "hol%d" - -#define hol_off "%ld+hol%d" - -#if WORD_SIZE==2 -#define con_cst(x) fprintf(codefile,".data2\t%ld\n",x) -#else -#define con_cst(x) fprintf(codefile,".data4\t%ld\n",x) -#endif -#define con_ilb(x) fprintf(codefile,".data4\t%s\n",x) -#define con_dlb(x) fprintf(codefile,".data4\t%s\n",x) - -#define modhead ".sect .text\n.sect .rom\n.sect .data\n.sect .bss\n" - -#define fmt_id(sf,st) sprintf(st,"_%s",sf) - -#define BSS_INIT 0 -#define MACH_OPTIONS diff --git a/mach/m68k4/ncg/table b/mach/m68k4/ncg/table deleted file mode 100644 index a53b6bcec..000000000 --- a/mach/m68k4/ncg/table +++ /dev/null @@ -1,6942 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ - -rscid = "$Id$" - - /******************************** - * * - * 68000, 68010 and 68020 * - * back end table * - * * - ********************************/ - -#include - -#if TBL68881 && ! TBL68020 -Something very wrong here! -#endif -#if WORD_SIZE!=2 && WORD_SIZE!=4 -Something very wrong here! -#endif - -#if TBL68020 -#define SYNTAX_68020 1 -#endif - -/* #define FANCY_MODES 1 -/* On the M68020, there are some real fancy addressing modes. - Their use makes the code a bit shorter, but also much slower. - The FANCY_MODES #define enables the use of these addressing - modes. -*/ - -#define small(x) ((x)>=1 && (x)<=8) -#define directadd(x) (small(x) || (x)>128) -#define directsub(x) (directadd(0-x)) -#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8) -#define low8(x) ((x) & 0377) -#define low16(x) ((x) & 0177777) -#define in_1(x) sfit(x,8) -#define in_2(x) sfit(x,16) - - -EM_WSIZE = WORD_SIZE -EM_PSIZE = 4 -EM_BSIZE = 8 - -SL = 8 - -TIMEFACTOR = 1/2 - - -PROPERTIES - -D_REG /* data registers */ -A_REG(4) /* address registers */ -DD_REG /* allocatable D_REG, may not be a register variable */ -AA_REG(4) /* allocatable A_REG, may not be a register variable */ -RD_REG /* data register, register var */ -RA_REG(4) /* address register, register var */ -#if WORD_SIZE==2 -D_REG4(4) /* data register, 4 bytes */ -DD_REG4(4) /* allocatable D_REG, 4 bytes */ -#else -#define D_REG4 D_REG -#define DD_REG4 DD_REG -#endif -#if TBL68881 -FS_REG(4) /* floating point register */ -FD_REG(8) /* double floating point register */ -#endif - - - -REGISTERS - -d0, d1, d2 :D_REG, DD_REG. -d3, d4, d5, d6, d7 :D_REG, RD_REG regvar. -#if WORD_SIZE==2 -dl0("d0")=d0, dl1("d1")=d1, dl2("d2")=d2 :D_REG4, DD_REG4. -#else -#define dl0 d0 -#define dl1 d1 -#define dl2 d2 -#endif -a0, a1 :A_REG, AA_REG. -a2, a3, a4, a5 :A_REG, RA_REG regvar(reg_pointer). -lb ("a6"), sp :A_REG. /* localbase and stack pointer */ -#if TBL68881 -F0 ("fp0"), F1 ("fp1"), F2 ("fp2"), F3 ("fp3"), F4 ("fp4"), F5 ("fp5"), -F6 ("fp6"), F7 ("fp7") :FS_REG. -fp0=F0,fp1=F1,fp2=F2,fp3=F3,fp4=F4,fp5=F5,fp6=F6,fp7=F7 - :FD_REG. -#endif - - - -TOKENS - - /* Not all addressing modes available on the MC68020 are used in this - * table. E.g (Dn), data register indirect is not used. Compared to - * (An), address register indirect, (Dn) requires two more bytes and - * several more clock cycles. Using (Dn) is even more expensive in - * time than first moving Dn to an address register An, and then using - * (An). For this kind of reasons several addressing modes are - * not used in this table. - * - * Cost in bytes may sometimes be incorrect. Several effective addresses - * use displacements that can occupy either 2 or 4 bytes. These are not - * considered different TOKENS in this table. - * - * Data registers are the only registers used as index registers in this - * table; address registers are only used to hold addresses. - * - * For the m68k2 and m68k4 table: the MC68000 and MC68010 have two - * modes that use displacements (offsets) of limited size: - * - offset(A_REG, Index_reg), where offset is only 8 bits, and - * - offset(A_REG), where offset can only be 16 bits. - * To make sure that no output is given with offsets too large, two - * extra tokens are declared: t_regAregXcon and t_regAcon. These are - * used as addresses to these modes. Whenever the displacements become - * too large, they are transformed into different tokens. - * - * Sometimes some TOKENS are used with displacements (offsets) of 0. - * It would have been possible to provide separate TOKENS for these, in - * case the assembler doesn't handle zero offsets optimally. This - * however would mean a very large amount of extra TOKENS and SETS for - * a very small profit in code bytes, so we won't do that. - * - * To prevent the TOKENS list from getting too unreadable, #ifdefs are - * used to form three parts: - * (i) the common part; - * (ii) the m68k2 and m68k4 part; - * (iii) the m68020 part; - */ - - /* Part (i) */ -zero_const = {INT num;} WORD_SIZE cost(0,0) "#" num . -small_const = {INT num;} WORD_SIZE cost(0,0) "#" num . -bconst = {INT num;} WORD_SIZE cost(0,0) "#" num . -const = {INT num;} WORD_SIZE cost(4,4) "#" num . -#if WORD_SIZE==2 -/* ??? "string+const */ -zero_const4 = {INT num;} 4 cost(0,0) "#" num . -small_const4 = {INT num;} 4 cost(0,0) "#" num . -bconst4 = {INT num;} 4 cost(0,0) "#" num . -const4 = {ADDR num;} 4 cost(4,4) "#" num . -#endif -indirect4 = {A_REG reg;} 4 cost(0,4) "(" reg ")" . -post_inc4 = {A_REG reg;} 4 cost(0,4) "(" reg ")+" . -pre_dec4 = {A_REG reg;} 4 cost(0,5) "-(" reg ")" . -dreg4 = {D_REG4 reg;} 4 cost(0,0) reg . -areg = {A_REG reg;} 4 cost(0,0) reg . -dreg2 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -indirect2 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")" . -post_inc2 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")+" . -pre_dec2 = {A_REG reg;} WORD_SIZE cost(0,5) "-(" reg ")" . -dreg1 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -indirect1 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")" . -post_inc1 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")+" . -pre_dec1 = {A_REG reg;} WORD_SIZE cost(0,5) "-(" reg ")" . - -ext_addr = {ADDR bd;} 4 cost(4,5) "#" bd . -llabel = {ADDR bd;} 4 cost(2,0) bd . -slabel = {ADDR bd;} 4 cost(0,0) bd . - -/* check this out */ -extend1 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -#if WORD_SIZE==2 -extend1_4 = {D_REG4 reg;} 4 cost(0,0) reg . -#else -#define extend1_4 extend1 -#endif -extend2 = {D_REG4 reg;} 4 cost(0,0) reg . - -#ifndef SYNTAX_68020 - /* Part (ii) in m68k2/4 syntax */ -absolute4 = {ADDR bd;} 4 cost(4,8) bd . -offsetted4 = {A_REG reg; INT bd;} 4 cost(2,6) bd "(" reg ")" . -index_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,7) - bd "(" reg "," xreg ".l)" . -absolute2 = {ADDR bd;} WORD_SIZE cost(4,6) bd . -offsetted2 = {A_REG reg; INT bd;} WORD_SIZE cost(2,4) bd "(" reg ")" . -index_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(2,5) - bd "(" reg "," xreg ".l)" . -absolute1 = {ADDR bd;} WORD_SIZE cost(4,6) bd . -offsetted1 = {A_REG reg; INT bd;} WORD_SIZE cost(2,4) bd "(" reg ")" . -index_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(2,5) - bd "(" reg "," xreg ".l)" . - -LOCAL = {INT bd;} WORD_SIZE cost(2,6) bd "(a6)" . -#if WORD_SIZE==2 -/* pointers may go into DLOCAL's */ -DLOCAL = {INT bd;} 4 cost(2,6) bd "(a6)" . -#endif - -local_addr = {INT bd;} 4 cost(2,6) bd "(a6)" . -regAcon = {A_REG reg; INT bd;} 4 cost(2,6) bd "(" reg ")" . -regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,8) - bd "(" reg "," xreg ".l)" . - /* note: in the m68k[24] version %sc always equals 1 */ -#endif - -#ifdef SYNTAX_68020 - /* Part (ii) in m68020 syntax */ -absolute4 = {ADDR bd;} 4 cost(4,7) "(" bd ")" . -offsetted4 = {A_REG reg; INT bd;} 4 cost(2,6) "(" bd "," reg ")" . -index_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . -absolute2 = {ADDR bd;} WORD_SIZE cost(4,7) "(" bd ")" . -offsetted2 = {A_REG reg; INT bd;} WORD_SIZE cost(2,6) "(" bd "," reg ")" . -index_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . -absolute1 = {ADDR bd;} WORD_SIZE cost(4,7) "(" bd ")" . -offsetted1 = {A_REG reg; INT bd;} WORD_SIZE cost(2,6) "(" bd "," reg ")" . -index_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . - -LOCAL = {INT bd;} WORD_SIZE cost(2,6) "(" bd ",a6)" . -#if WORD_SIZE==2 -/* pointers may go into DLOCAL's */ -DLOCAL = {INT bd;} 4 cost(2,6) "(" bd ",a6)" . -#endif -local_addr = {INT bd;} 4 cost(2,3) "(" bd ",a6)" . -regAcon = {A_REG reg; INT bd;} 4 cost(2,3) "(" bd "," reg ")" . -regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,7) - "(" bd "," reg "," xreg ".l*" sc ")" . -#endif -#ifdef TBL68020 - /* Part (iii) */ -abs_index4 = {INT sc; D_REG4 xreg; ADDR bd;} 4 cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off4 = {A_REG reg; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off4 = {ADDR bd; ADDR od;} 4 cost(8,22) "([" bd "]," od ")" . -ABS_indoff4 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off4 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -abs_index2 = {INT sc; D_REG4 xreg; ADDR bd;} WORD_SIZE cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off2 = {A_REG reg; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off2 = {ADDR bd; ADDR od;} WORD_SIZE cost(8,22) "([" bd "]," od ")" . -ABS_indoff2 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off2 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -abs_index1 = {INT sc; D_REG4 xreg; ADDR bd;} WORD_SIZE cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off1 = {A_REG reg; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off1 = {ADDR bd; ADDR od;} WORD_SIZE cost(8,22) "([" bd "]," od ")" . -ABS_indoff1 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off1 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -ILOCAL = {INT bd;} WORD_SIZE cost(4,16) "([" bd ",a6])" . - -off_con = {A_REG reg; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "]," od ")". -off_regXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -indoff_con = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -abs_con = {ADDR bd; ADDR od;} 4 cost(8,21) "([" bd "]," od ")" . -abs_regXcon = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,21) - "([" bd "]," xreg ".l*" sc "," od ")" . -absind_con = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,21) - "([" bd "," xreg ".l*" sc "]," od ")" . -ext_regX = {INT sc; D_REG4 xreg; ADDR bd;} 4 cost(6,15) - "(" bd "," xreg ".l*" sc ")" . - -regX = {INT sc; D_REG4 xreg;} 4 cost(2,7) "(" xreg ".l*" sc ")" . -DREG_pair = {D_REG4 reg1; D_REG4 reg2;} 8 cost(2,0) reg1 ":" reg2 . - -#define t_regAregXcon regAregXcon -#define t_regAcon regAcon - -#else /* TBL68020 */ -t_regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,8) . -t_regAcon = {A_REG reg; INT bd;} 4 cost(2,6) . -#endif - -#if WORD_SIZE!=2 -#define DLOCAL LOCAL -#endif - -SETS - - /* The SETS list cannot be kept as 'readable' as the TOKENS - * list because cgg is one pass. - * We makes use of the fact that sets are indeed sets. Thus - * D_REG + D_REG4 == D_REG, when the wordsize is 4. - */ - -sconsts = small_const + bconst . -consts = const + sconsts + zero_const. -#if WORD_SIZE!=2 -#define small_const4 small_const -#define zero_const4 zero_const -#define bconst4 bconst -#define const4 const -#define sconsts4 sconsts -#define consts4 consts -#else -sconsts4 = small_const4 + bconst4 . -consts4 = const4 + sconsts4 + zero_const4. -#endif - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -data4 = D_REG4 + DLOCAL + consts4 + post_inc4 + pre_dec4 + - indirect4 + offsetted4 + index_off4 + absolute4 + - ext_addr + dreg4 . -memory4 = data4 - D_REG4 - dreg4 . -control4 = indirect4 + offsetted4 + index_off4 + absolute4 + - DLOCAL. -alterable4 = data4 + A_REG - consts4 - ext_addr . -any4 = data4 + A_REG . /* all four above together */ - -#if WORD_SIZE==2 -data2 = D_REG + LOCAL + dreg2 + post_inc2 + pre_dec2 + - indirect2 + offsetted2 + index_off2 + absolute2 + - consts . -memory2 = data2 - D_REG - dreg2 . -control2 = indirect2 + offsetted2 + index_off2 + absolute2 + LOCAL. -#else -data2 = dreg2 + post_inc2 + pre_dec2 + indirect2 + - offsetted2 + index_off2 + absolute2 + consts . -memory2 = data2 - dreg2 . -control2 = indirect2 + offsetted2 + index_off2 + absolute2 . -#endif -alterable2 = data2 + D_REG - consts . -any2 = data2 + D_REG . - -data1 = dreg1 + post_inc1 + pre_dec1 + indirect1 + - offsetted1 + index_off1 + absolute1 + consts . -memory1 = data1 - dreg1 . -control1 = indirect1 + offsetted1 + index_off1 + absolute1 . -alterable1 = data1 + D_REG - consts . -any1 = data1 + D_REG . - -#else /* TBL68020 */ - -data4 = D_REG4 + indirect4 + post_inc4 + pre_dec4 + index_off4 + - offsetted4 + OFF_off4 + OFF_indoff4 + - INDOFF_off4 + dreg4 + - ABS_off4 + ABS_indoff4 + ABSIND_off4 + - absolute4 + abs_index4 + consts4 + ext_addr + - DLOCAL -#if WORD_SIZE!=2 - + ILOCAL -#endif - . -memory4 = data4 - D_REG4 - dreg4 . -control4 = memory4 - (post_inc4 + pre_dec4 + consts4 + ext_addr). -alterable4 = data4 + A_REG - consts - ext_addr . -any4 = data4 + A_REG . /* all four above together */ - -#if WORD_SIZE==2 -data2 = D_REG + LOCAL+ ILOCAL+ - dreg2 + indirect2 + post_inc2 + pre_dec2 + index_off2 + - offsetted2 + OFF_off2 + OFF_indoff2 + - INDOFF_off2 + - ABS_off2 + ABS_indoff2 + ABSIND_off2 + - absolute2 + abs_index2 + consts . -memory2 = data2 - D_REG - dreg2 . -#else -data2 = dreg2 + indirect2 + post_inc2 + pre_dec2 + index_off2 + - offsetted2 + OFF_off2 + OFF_indoff2 + - INDOFF_off2 + - ABS_off2 + ABS_indoff2 + ABSIND_off2 + - absolute2 + abs_index2 + consts . -memory2 = data2 - dreg2 . -#endif -control2 = memory2 - (post_inc2 + pre_dec2 + consts ) . -alterable2 = data2 + D_REG - consts . -any2 = data2 + D_REG. /* all four above together */ - -data1 = dreg1 + indirect1 + post_inc1 + pre_dec1 + index_off1 + - offsetted1 + OFF_off1 + OFF_indoff1 + - INDOFF_off1 + - ABS_off1 + ABS_indoff1 + ABSIND_off1 + - absolute1 + abs_index1 + consts . -memory1 = data1 - dreg1 . -control1 = memory1 - (post_inc1 + pre_dec1 + consts ) . -alterable1 = data1 + D_REG - consts . -any1 = data1 + D_REG. /* all four above together */ - -#endif /* TBL68020 */ - /* This is a common part */ -#if WORD_SIZE==2 -/* Not any4, since any is used in 'with' and not in 'kills' */ -any = any2 + any1 . -#else -any = any4 + any2 + any1 . -#endif -control = control4 + control2 + control1 . -indirect = indirect4 + indirect2 + indirect1 . -offsetted = offsetted4 + offsetted2 + offsetted1 . -index_off = index_off4 + index_off2 + index_off1 . -absolute = absolute4 + absolute2 + absolute1 . -pre_post = pre_dec4 + pre_dec2 + pre_dec1 + - post_inc4 + post_inc2 + post_inc1 . - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -regind_addr = regAcon + regAregXcon + t_regAcon + t_regAregXcon . -address = ext_addr + local_addr + regAcon + regAregXcon . -all_regind = indirect + offsetted + pre_post + index_off + - regind_addr + areg . -all_indir = all_regind . -allexceptcon = ALL - ( D_REG + A_REG + consts + dreg2 + dreg1 + - local_addr + ext_addr + regAcon + regAregXcon + - t_regAcon + t_regAregXcon ) . -use_index = index_off4 + index_off2 + index_off1 . - -#else /* TBL68020 */ - -reg_memind4 = OFF_off4 + OFF_indoff4 + INDOFF_off4 . -memind4 = reg_memind4 + - ABS_off4 + ABS_indoff4 . -reg_memind2 = OFF_off2 + OFF_indoff2 + INDOFF_off2 . -memind2 = reg_memind2 + - ABS_off2 + ABS_indoff2 . -reg_memind1 = OFF_off1 + OFF_indoff1 + INDOFF_off1 . -memind1 = reg_memind1 + - ABS_off1 + ABS_indoff1 . -reg_memind = reg_memind4 + reg_memind2 + reg_memind1 . -memind = memind4 + memind2 + memind1 . -regind_addr = regAcon + regAregXcon + - off_con + off_regXcon + - indoff_con . -address = regind_addr + - ext_addr + local_addr + - abs_con + abs_regXcon + - absind_con + - ext_regX . -all_regind = indirect + offsetted + index_off + pre_post + - reg_memind + regind_addr + areg . -all_indir = all_regind + memind + ILOCAL . -allexceptcon = ALL - ( D_REG + A_REG + consts + dreg2 + dreg1 + - local_addr + ext_addr + regAcon + regAregXcon + ext_regX ) . -use_index4 = index_off4 + abs_index4 + - OFF_indoff4 + INDOFF_off4 + - ABS_indoff4 + ABSIND_off4 . -use_index2 = index_off2 + abs_index2 + - OFF_indoff2 + INDOFF_off2 + - ABS_indoff2 + ABSIND_off2 . -use_index1 = index_off1 + abs_index1 + - OFF_indoff1 + INDOFF_off1 + - ABS_indoff1 + ABSIND_off1 . -use_indaddr = regAregXcon + - off_regXcon + indoff_con + - abs_regXcon + absind_con + - ext_regX . - -use_index = use_index4 + use_index2 + use_index1 + use_indaddr + regX . - -#endif /* TBL68020 */ - /* A common part */ -posextern = absolute + all_indir . - -#if WORD_SIZE==2 -genreg2 = D_REG . -#define genreg genreg2 -#else -#define genreg genreg4 -#endif -genreg4 = D_REG4 + A_REG. -label = llabel + slabel . -immediate4 = consts4 + ext_addr . -#if WORD_SIZE==2 -immediate2 = consts . -#endif -conreg4 = D_REG4 + immediate4 . -conreg2 = dreg2 + consts + D_REG . -conreg1 = dreg1 + consts + D_REG . -#if WORD_SIZE==2 -conreg = conreg1 + conreg2 . -#else -conreg = conreg1 + conreg2 + conreg4 . -#endif -shconreg = D_REG + small_const . -datalt4 = data4 * alterable4 . -datalt2 = data2 * alterable2 . -datalt1 = data1 * alterable1 . -datalt = datalt4 + datalt2 + datalt1 . -memalt4 = memory4 * alterable4 . -memalt2 = memory2 * alterable2 . -memalt1 = memory1 * alterable1 . - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -imm_cmp4 = alterable4 - A_REG . -imm_cmp2 = alterable2 + D_REG . -imm_cmp1 = datalt1 + D_REG . - -test_set4 = datalt4 + extend2 + extend1_4 . -#if WORD_SIZE==2 -test_set2 = datalt2 + extend1 . -#else -test_set2 = datalt2 . -#endif -test_set1 = datalt1 . - -#else /* TBL68020 */ - -imm_cmp4 = any4 - immediate4 - A_REG . -imm_cmp2 = any2 - consts . -imm_cmp1 = any1 - consts . - -test_set4 = any4 - immediate4 + extend2 + extend1_4 . -#if WORD_SIZE==2 -test_set2 = data2 + extend1 - immediate2 . -#else -test_set2 = data2 - consts . -#endif -test_set1 = data1 - consts . - -#endif /* TBL68020 */ - -test_set = test_set4 + test_set2 + test_set1 . - -#ifndef TBL68020 -t_address = address + t_regAregXcon + t_regAcon . -#else /* TBL68020 */ -#define t_address address -#endif /* TBL68020 */ - -#if TBL68881 -freg = FD_REG + FS_REG . -store4 = any4 + FS_REG . -#else -store4 = any4 . -#endif -#if WORD_SIZE==2 -dups2 = genreg2 . -#endif -dups4 = genreg4 . - -#include "instrmacs.h" - -INSTRUCTIONS - - /* Since the 68000 , the 68010 and the 68020 instruction sets are rather - * extensive, especially because e.g. 'add.l' and 'add.w' are - * considered different instructions, only those instructions are - * listed here that are used in the rest of this table. - * - * Instruction timing cost cannot be accurately given, nor the timing - * cost for getting operands. Detailed information about this can be - * found in the "MC68020 User's Manual", section 9, about instruction - * timing. The cost used in this table are 'worst case' cost, as - * mentioned in section 9 of the user's manual. Furthermore, the - * timing information for the 68k[24] and the 68020 differ, which - * means that the 68k[24] will not always have the best code - * possible. - * - * The first few instructions had to be added because register - * variables are used. The LOCALs below are register variables. - * One may not conclude that these operations are also allowed - * on LOCALs that are not register variables. - * The cost have been adapted, but are not accurate; when 'real' - * LOCALs are used the cost are very inaccurate. - */ - -add_i ADD_I any_int:ro, LOCAL:rw:cc cost(0,0). -sub_i SUB_I any_int:ro, LOCAL:rw:cc cost(0,0). -lea address:ro, DLOCAL:wo cost(0,0). -sh "illegal" shconreg+LOCAL:ro, LOCAL:rw:cc cost(0,0). -xxx "illegal" data4:ro, LOCAL:rw:cc cost(0,0). -xxx "illegal" LOCAL:ro, alterable4:rw:cc cost(0,0). -#if WORD_SIZE==2 -/* divs_w "divs.w" data2:ro, LOCAL:rw:cc cost(0,56). */ -/* divu_w "divu.w" data2:ro, LOCAL:rw:cc cost(0,44). */ -muls_w "muls.w" data2:ro, LOCAL:rw:cc cost(0,28). -mulu_w "mulu.w" data2:ro, LOCAL:rw:cc cost(0,28). -#endif -#if TBL68020 && WORD_SIZE!=2 -divs_l "divs.l" data4:ro, LOCAL:rw:cc cost(0,90). -divu_l "divu.l" data4:ro, LOCAL:rw:cc cost(0,78). -muls_l "muls.l" data4:ro, LOCAL:rw:cc cost(0,44). -mulu_l "mulu.l" data4:ro, LOCAL:rw:cc cost(0,44). -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -add_l "add.l" any4:ro, D_REG4:rw:cc cost(2,3). -#else -add_l "add.l" any4:ro, D_REG+LOCAL:rw:cc cost(2,3). -#endif -add_l "add.l" any4:ro, A_REG+DLOCAL+areg:rw cost(2,3). -add_l "add.l" conreg4:ro, alterable4:rw:cc cost(2,6). -#if WORD_SIZE==2 -add_w "add.w" any2:ro, D_REG+LOCAL:rw:cc cost(2,3). -add_w "add.w" conreg2:ro, alterable2:rw:cc cost(2,6). -#endif -and_l "and.l" data4:ro, D_REG4:rw:cc cost(2,3). -and_l "and.l" D_REG4:ro, memalt4:rw:cc cost(2,6). -and_l "and.l" consts4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -and_w "and.w" data2:ro, D_REG:rw:cc cost(2,3). -and_w "and.w" D_REG:ro, memalt2:rw:cc cost(2,6). -and_w "and.w" consts:ro, datalt2:rw:cc cost(2,6). -#endif -asl_l "asl.l" shconreg:ro, D_REG4:rw:cc cost(2,5). -asl "asl #1," memalt2:rw:cc cost(2,4). -asr_l "asr.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -asr "asr #1," memalt2:rw:cc cost(2,4). -#if WORD_SIZE==2 -asl_w "asl.w" shconreg:ro, D_REG:rw:cc cost(2,5). -asr_w "asr.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -bclr const:ro, D_REG:rw kills:cc cost(2,4). -bra label cost(2,5). -bcc label cost(2,5). -bcs label cost(2,5). -beq label cost(2,5). -bge label cost(2,5). -bgt label cost(2,5). -bhi label cost(2,5). -ble label cost(2,5). -bls label cost(2,5). -blt label cost(2,5). -bmi label cost(2,5). -bne label cost(2,5). -bpl label cost(2,5). -bvc label cost(2,5). -bvs label cost(2,5). -bset conreg2:ro, D_REG+D_REG4:rw kills :cc cost(2,4). -btst conreg2:ro, any1:rw kills :cc cost(2,3). -/* Check dreg[21] for m68020 and m68k2 */ -clr_l "clr.l" D_REG4+dreg4:wo:cc cost(2,3). -clr_l "clr.l" memalt4:wo:cc cost(2,6). -clr_w "clr.w" D_REG+dreg2:wo:cc cost(2,2). -clr_w "clr.w" memalt2:wo:cc cost(2,4). -clr_b "clr.b" D_REG+dreg1:wo:cc cost(2,2). -clr_b "clr.b" memalt1:wo:cc cost(2,4). -cmp_l "cmp.l" any4:ro, genreg4:ro kills :cc cost(2,3). -cmp_l "cmp.l" post_inc4:ro, post_inc4:ro kills :cc cost(2,2). -cmp_l "cmp.l" immediate4:ro, imm_cmp4:ro kills :cc cost(2,2). -#if WORD_SIZE==2 -cmp_w "cmp.w" any2+extend2:ro, D_REG+dreg2+extend2:ro kills :cc cost(2,2). -#else -cmp_w "cmp.w" any2+extend2:ro, dreg2+extend2:ro kills :cc cost(2,2). -#endif -cmp_w "cmp.w" post_inc2:ro, post_inc2:ro kills :cc cost(2,2). -cmp_w "cmp.w" consts:ro, imm_cmp2:ro kills :cc cost(2,2). -cmp_b "cmp.b" any1+extend1+extend1_4:ro, dreg1+extend1+extend1_4:ro kills :cc cost(2,3). -cmp_b "cmp.b" post_inc1:ro, post_inc1:ro kills :cc cost(2,2). -cmp_b "cmp.b" consts:ro, imm_cmp1:ro kills :cc cost(2,2). -dbf D_REG4:rw, label cost(2,5). -eor_l "eor.l" conreg4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -eor_w "eor.w" conreg2:ro, datalt2:rw:cc cost(2,4). -#endif -/* in the next two instructions: LOCAL only allowed if register var */ -ext_l "ext.l" D_REG+LOCAL+D_REG4:rw:cc cost(2,2). -ext_w "ext.w" D_REG+LOCAL+D_REG4:rw:cc cost(2,2). -jmp address+control4 cost(2,0). -jsr address+control4 kills :cc d0 d1 d2 a0 a1 cost(2,3). -lea address+control4:ro, A_REG+areg:wo cost(2,0). -/* -lsl_l "lsl.l" shconreg:ro, D_REG:rw:cc cost(2,4). -lsl "lsl #1," memalt2:rw:cc cost(2,4). -*/ -lsr_l "lsr.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -#if WORD_SIZE==2 -lsr_w "lsr.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -lsr "lsr #1," memalt2:rw:cc cost(2,4). -/* move_l does not set the condition codes if the destination is an - address register! -*/ -move_l "move.l" any4:ro, A_REG+areg:wo cost(2,2). -move_l "move.l" any4:ro, alterable4+dreg4-(areg+A_REG):wo:cc cost(2,2). -#if WORD_SIZE==2 -move_l "move.l" sconsts:ro, D_REG+dreg2:wo:cc cost(2,2). -/* -move_l "move.l" any2:ro, alterable4+dreg4-(areg+A_REG):wo:cc cost(2,2). -*/ -move_w "move.w" any2:ro, alterable2+dreg2:wo:cc cost(2,2). -move_b "move.b" any1:ro, alterable1+dreg2:wo:cc cost(2,2). -#else -move_w "move.w" any2:ro, alterable2+dreg4:wo:cc cost(2,2). -move_b "move.b" any1:ro, alterable1+dreg4:wo:cc cost(2,2). -#endif -neg_b "neg.b" D_REG:rw:cc cost(2,3). -neg_w "neg.w" D_REG:rw:cc cost(2,3). -neg_l "neg.l" D_REG4:rw:cc cost(2,3). -neg_l "neg.l" memory4:rw:cc cost(2,6). -#if WORD_SIZE==2 -neg_w "neg.w" memory2:rw:cc cost(2,6). -#endif -not_l "not.l" D_REG4:rw:cc cost(2,3). -not_l "not.l" memory4:rw:cc cost(2,6). -#if WORD_SIZE==2 -not_w "not.w" D_REG:rw:cc cost(2,3). -not_w "not.w" memory2:rw:cc cost(2,6). -#endif -or_l "or.l" data4:ro, D_REG4:rw:cc cost(2,3). -or_l "or.l" D_REG4:ro, memalt4:rw:cc cost(2,6). -or_l "or.l" consts4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -or_w "or.w" data2:ro, D_REG:rw:cc cost(2,3). -or_w "or.w" D_REG:ro, memalt2:rw:cc cost(2,6). -or_w "or.w" consts:ro, datalt2:rw:cc cost(2,6). -#endif -rol_l "rol.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -rol "rol #1," memalt2:rw:cc cost(2,4). -ror_l "ror.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -ror "ror #1," memalt2:rw:cc cost(2,4). -#if WORD_SIZE==2 -rol_w "rol.w" shconreg:ro, D_REG:rw:cc cost(2,4). -ror_w "ror.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -roxl "roxl #1," memalt2:rw:cc cost(2,4). -roxr "roxr #1," memalt2:rw:cc cost(2,4). -sne datalt1:rw cost(2,3). -sub_l "sub.l" any4:ro, D_REG4:rw:cc cost(2,3). -sub_l "sub.l" any4+areg:ro, A_REG+areg:rw cost(2,3). -sub_l "sub.l" conreg4:ro, alterable4:rw:cc cost(2,6). -#if WORD_SIZE==2 -sub_w "sub.w" any2:ro, D_REG+LOCAL:rw:cc cost(2,3). -sub_w "sub.w" conreg2:ro, alterable2:rw:cc cost(2,6). -/* On a swap, we only want the lower part of D_REG, so don't set cc */ -swap D_REG:rw kills :cc cost(2,2). -#endif -tst_l "tst.l" test_set4:ro:cc cost(2,3). -tst_w "tst.w" test_set2+extend2:ro:cc cost(2,3). -tst_b "tst.b" test_set1+extend1+extend1_4:ro:cc cost(2,3). -unlk A_REG cost(2,6). - -bxx "illegal" label cost(2,5). -sxx "illegal" any_int:wo cost(2,5). -#if WORD_SIZE==2 -s4xx "illegal" any4:wo cost(2,5). -xxx "illegal" any4+any2:ro, any4+any2:rw:cc cost(2,3). -bit "illegal" control4+control2:rw:cc cost(2,6). -#else -xxx "illegal" any4:ro, any4:rw:cc cost(2,3). -bit "illegal" control4:rw:cc cost(2,6). -#endif -sh "illegal" shconreg:ro, D_REG:rw:cc cost(2,4). -shw "illegal" control2:rw:cc cost(2,4). - -#if WORD_SIZE==2 -divs_w "divs.w" data2:ro, D_REG:rw:cc cost(0,56). -divu_w "divu.w" data2:ro, D_REG:rw:cc cost(0,44). -muls_w "muls.w" data2:ro, D_REG:rw:cc cost(0,28). -mulu_w "mulu.w" data2:ro, D_REG:rw:cc cost(0,28). -#endif -#ifdef TBL68020 -cmp2_l "cmp2.l" address+control4:ro, genreg4:ro kills :cc cost(2,18). -divs_l "divs.l" data4:ro, D_REG4:rw:cc cost(2,90). -divu_l "divu.l" data4:ro, D_REG4:rw:cc cost(2,78). -divsl_l "divsl.l" data4:ro, DREG_pair:rw kills :cc cost(2,90). -divul_l "divul.l" data4:ro, DREG_pair:rw kills :cc cost(2,78). -pea address+control4+regX cost(2,4). -#if WORD_SIZE==2 -cmp2_w "cmp2.w" address+control2:ro, genreg2:ro kills :cc cost(2,18). -extb_l "extb.l" extend1_4+D_REG4:rw:cc cost(2,4). -muls_l "muls.l" data4:ro, D_REG4:rw:cc cost(2,44). -mulu_l "mulu.l" data4:ro, D_REG4:rw:cc cost(2,44). -#else -/* in the next instruction: LOCAL only allowed if register var */ -extb_l "extb.l" extend1_4+D_REG+LOCAL:rw:cc cost(2,4). -muls_l "muls.l" data4:ro, D_REG+LOCAL:rw:cc cost(2,44). -mulu_l "mulu.l" data4:ro, D_REG+LOCAL:rw:cc cost(2,44). -#endif -#else /* TBL68020 */ -pea address+control4 cost(2,4). -#endif /* TBL68020 */ - - /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * Extra pseudo instruction; it just kills a D_REG; - * it is necessary with long divides where remainders are important; - * see also: 'pat rmi' and 'pat rmu' - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -killreg "! kill" D_REG+D_REG4+A_REG:wo cost(0,0). -killcc "! killcc" kills :cc cost(0,0). -#if TBL68881 -/* These descriptions are not very accurate, because we have no - other 8-byte objects in the table. - */ -fmove_s "fmove.s" data4:ro, freg:wo cost(4,100). -fmove_s "fmove.s" freg:ro, data4:wo cost(4,100). -fmove_d "fmove.d" freg:ro, data4:wo cost(4,100). -fmove_d "fmove.d" data4:ro, freg:ro cost(4,100). -fmove_l "fmove.l" freg:ro, D_REG:wo cost(4,100). -fmove_l "fmove.l" data4:ro, freg:wo cost(4,100). -fmove freg:ro,freg:wo cost(4,100). -fadd_s "fadd.s" data4:ro, freg:rw cost(4,100). -fadd_d "fadd.d" data4:ro, freg:rw cost(4,100). -fsub_s "fsub.s" data4:ro, freg:rw cost(4,100). -fsub_d "fsub.d" data4:ro, freg:rw cost(4,100). -fsub freg:ro, freg:rw cost(4,100). -fmul freg:ro, freg:rw cost(4,100). -fmul_s "fmul.s" data4:ro, freg:rw cost(4,100). -fmul_d "fmul.d" data4:ro, freg:rw cost(4,100). -fdiv freg:ro, freg:rw cost(4,100). -fdiv_s "fdiv.s" data4:ro, freg:rw cost(4,100). -fdiv_d "fdiv.d" data4:ro, freg:rw cost(4,100). -fcmp freg:ro, freg:ro cost(4,100). -fbeq label:ro cost(4,4). -fblt label:ro cost(4,4). -fmovecr const:ro, freg:rw cost(4,100). -fabs freg:rw cost(4,100). -fneg freg:rw cost(4,100). -fgetman freg:rw cost(4,100). -fintrz freg:ro, freg:wo cost(4,100). -fgetexp freg:ro, freg:wo cost(4,100). -fsub_l "fsub.l" const:ro, freg:rw cost(4,100). -#endif - - -MOVES - -from consts %num==0 to D_REG4+dreg4 - gen clr_l %2 - -#if WORD_SIZE==2 -from zero_const4 %num==0 to A_REG+areg - gen sub_l %2,%2 - -from zero_const4 %num==0 to D_REG4+dreg4 - gen clr_l %2 -#endif - -from consts %num==0 to A_REG+areg - gen sub_l %2,%2 - -#if WORD_SIZE==2 -from consts %num==0 to D_REG+dreg2 - gen clr_w %2 - -from sconsts to D_REG+dreg2 - gen move_l %1,%2 /* uses moveq */ - -from consts to D_REG4+dreg4 - gen move_l {const4, %1.num},%2 -#endif - -#if WORD_SIZE==2 -from sconsts4+zero_const4 %num==0 to memalt4 -#else -from consts %num==0 to memalt4 -#endif - gen clr_l %2 - -from consts %num==0 to memalt2 - gen clr_w %2 - -from consts %num==0 to memalt1 - gen clr_b %2 - -from consts to memalt1 - gen move_b {const, low8(%1.num)}, %2 - -#if WORD_SIZE!=2 -from consts to memalt2 - gen move_w {const, low16(%1.num)}, %2 -#endif - -from regAcon %bd==0 to A_REG+areg - gen move_l %1.reg, %2 - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) to A_REG+areg - gen lea {regAregXcon, %1.reg, %1.xreg, 1, %1.bd}, %2 - -from t_regAregXcon to A_REG+areg - gen lea {regAregXcon, %1.reg, %1.xreg, 1, 0}, %2 - add_l {const4, %1.bd}, %2 - -from t_regAcon sfit(%bd, 16) to A_REG+areg - gen lea {regAcon, %1.reg, %1.bd}, %2 - -from t_regAcon to A_REG+areg - gen move_l %1.reg, %2 - add_l {const4, %1.bd}, %2 -#endif /* TBL68020 */ - -from address - ext_addr to A_REG+areg - gen lea %1, %2 - -#if WORD_SIZE==2 -from ext_addr to A_REG+areg - gen lea {absolute4, %1.bd}, %2 -#endif - -from any4 to areg+A_REG - gen move_l %1, %2 - -from any4 to alterable4-(areg+A_REG) - gen move_l %1, %2 - -from any2 to alterable2 - gen move_w %1, %2 - -from any1 to alterable1 - gen move_b %1, %2 - -#if WORD_SIZE!=2 -from any4-sconsts4 to A_REG+areg - gen move_l %1, %2 - -from any2 to dreg4 - gen clr_l %2 - move_w %1, %2 -#endif - -from any1 to dreg_int - gen clr_i %2 - move_b %1, %2 - -#if WORD_SIZE==2 -from any1 to dreg2 - gen clr_w %2 - move_b %1, %2 -#endif - -#if TBL68881 -from data4 to FS_REG - gen fmove_s %1, %2 - -from FS_REG to datalt4 - gen fmove_s %1, %2 -#endif - -TESTS - -/* For the 68020 and m68k4, the extend1_4 will be extend1 */ -to test test_set4-(extend2+extend1+extend1_4) - gen tst_l %1 - -to test test_set2+extend2 - gen tst_w %1 - -to test test_set1+extend1+extend1_4 - gen tst_b %1 - - -STACKINGRULES - - -#if WORD_SIZE!=2 -from consts %num==0 to STACK - gen clr_l {pre_dec4, sp} -#else -from zero_const4 to STACK - gen clr_l {pre_dec4, sp} -from consts %num==0 to STACK - gen clr_w {pre_dec2, sp} -#endif - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) to STACK - gen pea {regAregXcon, %1.reg, %1.xreg, 1, %1.bd} - -from t_regAregXcon to STACK - gen pea {regAregXcon, %1.reg, %1.xreg, 1, 0} - add_l {const4, %1.bd}, {indirect4, sp} - -from t_regAcon sfit(%bd, 16) to STACK - gen pea {regAcon, %1.reg, %1.bd} - -from t_regAcon to STACK - gen move_l %1.reg, {pre_dec4, sp} - add_l {const4, %1.bd}, {indirect4, sp} -#endif /* TBL68020 */ - -from A_REG to STACK - gen pea {indirect4, %1} - -from address - ext_addr to STACK - gen pea %1 - -from ext_addr to STACK - gen pea {absolute4, %1.bd} - -#if WORD_SIZE!=2 -from consts to STACK - gen pea {absolute4, %1.num} -#else -from sconsts4 to STACK - gen pea {absolute4, %1.num} -from const4 to STACK - gen pea {absolute4, %1.num} -#endif - -from any4 to STACK - gen move_l %1, {pre_dec4, sp} - -#if WORD_SIZE!=2 -from any2 to STACK - uses DD_REG - gen clr_l %a - move_w %1, {dreg2, %a} - move_l %a, {pre_dec4, sp} - -from any2 to STACK - gen clr_l {pre_dec4, sp} - move_w %1, {offsetted2, sp, 2} -#else -from any2 to STACK - gen move_w %1, {pre_dec2, sp} -#endif - -from data1 to STACK - uses DD_REG -#if WORD_SIZE!=2 - gen clr_l %a - move_b %1, {dreg1, %a} - move_l %a, {pre_dec4, sp} -#else - gen clr_w %a - move_b %1, {dreg1, %a} - move_w %a, {pre_dec2, sp} -#endif - -from data1 to STACK -#if WORD_SIZE!=2 - gen clr_l {pre_dec4, sp} - move_b %1, {offsetted1, sp, 3} -#else - gen clr_w {pre_dec2, sp} - move_b %1, {offsetted1, sp, 1} -#endif - -from extend2 to STACK - gen ext_l %1.reg - move_l %1.reg,{pre_dec4, sp} - -from extend1_4 to STACK -#ifdef TBL68020 - gen extb_l %1.reg -#else - gen ext_w %1.reg - ext_l %1.reg -#endif - move_l %1.reg,{pre_dec4, sp} - -#if WORD_SIZE==2 -from extend1 to STACK - gen ext_w %1.reg - move_w %1.reg,{pre_dec2, sp} -#endif - -#ifdef TBL68020 -from regX to STACK - gen pea %1 -#endif /* TBL68020 */ - /* This last stackingrule is never used: whenever regX is put on - * the fakestack, some em-instuctions are left that remove it - * immediately. However cgg complained about not having a - * stackingrule for regX, so here it is - */ - -#if TBL68881 -from FS_REG to STACK - gen fmove_s %1,{pre_dec4,sp} - -from FD_REG to STACK - gen fmove_d %1,{pre_dec4,sp} -#endif -COERCIONS - - -from STACK - uses DD_REG4 - gen move_l {post_inc4, sp}, %a - yields %a - -#if WORD_SIZE==2 -from STACK - uses DD_REG - gen move_w {post_inc2,sp}, %a - yields %a -#endif - -from STACK - uses AA_REG - gen move_l {post_inc4, sp}, %a - yields %a - -#ifdef TBL68881 -from STACK - uses FS_REG - gen fmove_s {post_inc4, sp}, %a - yields %a -from STACK - uses FD_REG - gen fmove_d {post_inc4, sp}, %a - yields %a -#endif - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) - yields {regAregXcon, %1.reg, %1.xreg, 1, %1.bd} - -from t_regAregXcon - uses AA_REG=%1.reg - gen add_l {const4, %1.bd}, %a - yields {regAregXcon, %a, %1.xreg, 1, 0} - -/* - * The following coercions are necessary because the code generator - * must be able to make the token from the real stack, otherwise the - * coercion will not be made. Unfortunatly, inside a coercion, we are only - * allowed to allocate 1 register, which means that there is no way to make - * a regAregXcon from the stack, which, in its turn, means that the other - * coercions will not be taken. - * -/*from STACK - uses AA_REG, DD_REG4 = {zero_const4, 0} - gen move_l {post_inc4, sp}, %a - yields {regAregXcon, %a, %b, 1, 0} -*/ -from STACK - uses AA_REG - gen move_l {post_inc4, sp}, %a - yields {regAcon, %a, 0} - -from t_regAcon sfit(%bd, 16) - yields {regAcon, %1.reg, %1.bd} - -from t_regAcon - uses reusing %1, AA_REG=%1.reg - gen add_l {const4, %1.bd}, %a - yields %a -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -from regAregXcon %bd==0 && %sc==1 - uses reusing %1, AA_REG = %1.reg - gen add_l {dreg4,%1.xreg},%a - yields %a - -from regAregXcon %sc==1 - uses reusing %1, AA_REG = %1.reg - gen add_l {dreg4, %1.xreg}, %a - yields {regAcon, %a, %1.bd} -#endif - -#if WORD_SIZE==2 -from sconsts - uses DD_REG4={const4, %1.num} /* uses moveq */ - yields %a.1 -#endif - -#if WORD_SIZE==2 -from any2 -uses reusing %1, DD_REG = %1 yields %a -#endif - -from any4 - uses reusing %1, DD_REG4 = %1 - yields %a - -from any4 - uses reusing %1, AA_REG = %1 - yields %a - -from t_address - uses reusing %1, AA_REG = %1 - yields %a - -#if TBL68881 -from data4 - uses reusing %1, FS_REG = %1 - yields %a -#endif - -from memory2 - uses DD_REG -#if WORD_SIZE!=2 - = {zero_const, 0} -#endif - gen move_w %1, %a yields %a - -from memory1 - uses DD_REG = {zero_const, 0} - gen move_b %1, %a yields %a - -from memory2 - uses DD_REG - gen move_w %1, %a yields {dreg2, %a} - -from memory1 - uses DD_REG - gen move_b %1, %a yields {dreg1, %a} - -from extend2 - gen ext_l %1.reg yields %1.reg - -#if WORD_SIZE==2 -from extend1 - gen ext_w %1.reg yields %1.reg -#endif - -from extend1_4 -#ifdef TBL68020 - gen extb_l %1.reg -#else - gen ext_w %1.reg - ext_l %1.reg -#endif - yields %1.reg - -PATTERNS - -/******************************** - * First some longer patterns * - ********************************/ - -pat lol sbi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with any_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sub_i %1, {LOCAL, $1} - neg_i {LOCAL, $1} - -pat lol sbi stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer -with conreg_int-bconst - kills all_indir, LOCAL %bd==$1 - gen sub_i %1, {LOCAL, $1} - neg_i {LOCAL, $1} - -pat lol sbu stl $1==$3 && $2==WORD_SIZE - leaving lol $1 sbi WORD_SIZE stl $1 - -pat lil sbi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer -with conreg_int-bconst - kills allexceptcon - gen sub_i %1, {indirect_int, regvar($1, reg_pointer)} - neg_i {indirect_int, regvar($1, reg_pointer)} - -pat lil sbi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any -with conreg_int-bconst - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen sub_i %1, {indirect_int, %a} - neg_i {indirect_int, %a} - -pat lil sbu sil $1==$3 && $2==WORD_SIZE - leaving lil $1 sbi WORD_SIZE sil $1 - -proc lolrbitstl example lol ngi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen bit* {LOCAL, $1} - -pat lol ngi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolrbitstl(NEG_I) -pat lol com stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolrbitstl(NOT_I) - -proc lolbitstl example lol ngi stl - kills all_indir, LOCAL %bd==$1 - gen bit* {LOCAL, $1} - -pat lol ngi stl $1==$3 && $2==WORD_SIZE call lolbitstl(NEG_I) -pat lol com stl $1==$3 && $2==WORD_SIZE call lolbitstl(NOT_I) -#if WORD_SIZE==2 -proc ldlbitsdl example ldl ngi sdl - kills all_indir, DLOCAL %bd==$1 - gen bit* {DLOCAL, $1} - -pat ldl ngi sdl $1==$3 && $2==4 call ldlbitsdl("neg.l") -pat ldl com sdl $1==$3 && $2==4 call ldlbitsdl("not.l") -#endif - -proc loebitste example loe ngi ste - kills posextern - gen bit* {absolute_int, $1} - -pat loe ngi ste $1==$3 && $2==WORD_SIZE call loebitste(NEG_I) -pat loe com ste $1==$3 && $2==WORD_SIZE call loebitste(NOT_I) -#if WORD_SIZE==2 -proc ldebitsde example lde ngi sde - kills posextern - gen bit* {absolute4, $1} - -pat lde ngi sde $1==$3 && $2==4 call ldebitsde("neg.l") -pat lde com sde $1==$3 && $2==4 call ldebitsde("not.l") -#endif - -proc lilrbitsil example lil ngi sil - kills allexceptcon - gen bit* {indirect_int, regvar($1, reg_pointer)} - -pat lil ngi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilrbitsil(NEG_I) -pat lil com sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilrbitsil(NOT_I) -pat lil dec sil $1==$3 && inreg($1)==reg_pointer - call lilrbitsil(DEC) -pat lil inc sil $1==$3 && inreg($1)==reg_pointer - call lilrbitsil(INC) - -proc lilbitsil example lil ngi sil - kills allexceptcon -#if TBL68020 - gen bit* {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen bit* {indirect_int, %a} -#endif - -pat lil ngi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilbitsil(NEG_I) -pat lil com sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilbitsil(NOT_I) -pat lil dec sil $1==$3 && inreg($1)!=reg_any - call lilbitsil(DEC) -pat lil inc sil $1==$3 && inreg($1)!=reg_any - call lilbitsil(INC) - -proc lolcshstl example lol loc sli stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sh* {small_const, $2}, {LOCAL, $1} - -pat lol loc sli stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASL_I) -pat lol loc sri stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASR_I) -pat lol loc slu stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASL_I) -pat lol loc sru stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(LSR_I) -pat lol loc rol stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ROL_I) -pat lol loc ror stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ROR_I) - -proc lolrshstl example lol lol sli stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sh* {LOCAL, $2}, {LOCAL, $1} - -pat lol lol sli stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASL_I) -pat lol lol slu stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASL_I) -pat lol lol sri stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASR_I) -pat lol lol sru stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(LSR_I) -pat lol lol rol stl $1==$4 && inreg($2)==reg_any && $3==WORD_SIZE - && inreg($1)==reg_any - call lolrshstl(ROL_I) -pat lol lol ror stl $1==$4 && inreg($2)==reg_any && $3==WORD_SIZE - && inreg($1)==reg_any - call lolrshstl(ROR_I) - -#if WORD_SIZE!=2 -proc lil1shlsil example lil loc sli sil /* only left */ - kills allexceptcon - gen shw* {offsetted2, regvar($1, reg_pointer), 2} - roxl {indirect2, regvar($1, reg_pointer)} - -pat lil loc sli sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shlsil("asl #1,") -pat lil loc slu sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shlsil("asl #1,") - -proc lil1shrsil example lil loc sli sil /* only right */ - kills allexceptcon - gen shw* {indirect2, regvar($1, reg_pointer)} - roxr {offsetted2, regvar($1, reg_pointer), 2} - -pat lil loc sri sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shrsil("asr #1,") -pat lil loc sru sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shrsil("lsr #1,") - -#endif - - -pat LLP lof inc LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen add_i {const, 1}, {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof dec LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen sub_i {const, 1}, {offsetted_int, regvar($1, reg_pointer), $2} - -/* the patterns with adp should use add_l */ -pat LLP LFP adp LLP SFP $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen add_l {const4, $3}, {offsetted4, regvar($1, reg_pointer), $2} - -pat LEP LFP adp LEP SFP $1==$4 && $2==$5 - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {ABS_off4, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen add_l {const4, $3}, {offsetted4, %a, $2} -#endif - -pat LEP loi adp LEP sti $1==$4 && $2==4 && $5==4 - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {ABS_off4, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen add_l {const4, $3}, {indirect4, %a} -#endif - -#if WORD_SIZE!=2 -pat lil lof adp lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen add_l {const4, $3}, {offsetted4, %a, $2} -#endif - -pat lil loi adp lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen add_l {const4, $3}, {indirect4, %a} -#endif -#endif /* WORD_SIZE==2 */ - -pat lol inl $1==$2 && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen add_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat lol del $1==$2 && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen sub_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -/* the following rules are for unsigneds, since del and inl work on ints */ -pat lol loc lol adu stl $1==$3 && $3==$5 && $4==WORD_SIZE && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen add_i {const, $2}, {LOCAL, $1} - killreg %a - yields %a - -pat lol loc lol adu stl $1==$3 && $3==$5 && $4==WORD_SIZE - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen add_i {const, $2}, {LOCAL, $1} - killreg %a - yields %a - -pat lol dup loc sbu stl $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen sub_i {const, $3}, {LOCAL, $1} - killreg %a - yields %a - -pat lol dup loc sbu stl $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen sub_i {const, $3}, {LOCAL, $1} - killreg %a - yields %a - -pat loe loc loe adu ste $1==$3 && $3==$5 && $4==WORD_SIZE - kills posextern - uses DD_REG = {absolute_int, $1} - gen add_i {const,$2}, {absolute_int, $1} - killreg %a - yields %a - -pat loe dup loc sbu ste $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - kills posextern - uses DD_REG = {absolute_int, $1} - gen sub_i {const,$3}, {absolute_int, $1} - killreg %a - yields %a - -pat lil loc lil adu sil $1==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen add_i {const, $2}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup loc sbu sil $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen sub_i {const, $3}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -proc lolxxstl example lol and stl -with data_int-bconst - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* %1, {LOCAL, $1} - -pat lol adi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(ADD_I) -pat lol adu stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(ADD_I) -pat lol and stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(AND_I) -pat lol ior stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(OR_I) -pat lol xor stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with conreg_int-bconst - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen eor_i %1, {LOCAL, $1} - -#if TBL68020 || WORD_SIZE==2 -pat lol mli stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with data_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen muls_i %1, {LOCAL, $1} -pat lol mlu stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with data_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen mulu_i %1, {LOCAL, $1} -#endif /* TBL68020 */ - -proc lolxxxstl example lol adi stl -with conreg_int-bconst - kills all_indir, LOCAL %bd==$1 - gen xxx* %1, {LOCAL, $1} - -pat lol adi stl $1==$3 && $2==WORD_SIZE call lolxxxstl(ADD_I) -pat lol adu stl $1==$3 && $2==WORD_SIZE call lolxxxstl(ADD_I) -pat lol and stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(AND_I) -pat lol ior stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(OR_I) -pat lol xor stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(EOR_I) - -#if WORD_SIZE==2 -proc ldlxxxsdl example lol adi stl -with conreg4-bconst4 - kills all_indir, DLOCAL %bd==$1 - gen xxx* %1, {DLOCAL, $1} - -pat ldl adi sdl $1==$3 && $2==4 call ldlxxxsdl("add.l") -pat ldl adu sdl $1==$3 && $2==4 call ldlxxxsdl("add.l") -pat ldl and sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("and.l") -pat ldl ior sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("or.l") -pat ldl xor sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("eor.l") -#endif - -proc lilxxsil example lil and sil -with conreg_int-bconst - kills allexceptcon - gen xxx* %1, {indirect_int, regvar($1, reg_pointer)} - -pat lil adi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(ADD_I) -pat lil adu sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(ADD_I) -pat lil and sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(AND_I) -pat lil ior sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(OR_I) -pat lil xor sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil ads sil $1==$3 && $2==4 && inreg($1)==reg_pointer - call lilxxsil("add.l") -#endif - -proc lilxxxsil example lil adi sil -with conreg_int-bconst - kills allexceptcon -#if TBL68020 - gen xxx* %1, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* %1, {indirect_int, %a} -#endif - -pat lil adi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(ADD_I) -pat lil adu sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(ADD_I) -pat lil and sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(AND_I) -pat lil ior sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(OR_I) -pat lil xor sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil ads sil $1==$3 && $2==4 && inreg($1)!=reg_any - call lilxxxsil("add.l") -#endif - -proc loexxxste example loe adi ste -with conreg_int-bconst - kills posextern - gen xxx* %1, {absolute_int, $1} - -pat loe adi ste $1==$3 && $2==WORD_SIZE call loexxxste(ADD_I) -pat loe adu ste $1==$3 && $2==WORD_SIZE call loexxxste(ADD_I) -pat loe and ste $1==$3 && $2==WORD_SIZE call loexxxste(AND_I) -pat loe ior ste $1==$3 && $2==WORD_SIZE call loexxxste(OR_I) -pat loe xor ste $1==$3 && $2==WORD_SIZE call loexxxste(EOR_I) -#if WORD_SIZE!=2 -pat loe ads ste $1==$3 && $2==4 call loexxxste("add.l") -#endif - -#if WORD_SIZE==2 -proc ldexxxsde example lde adi sde -with conreg4-bconst4 - kills posextern - gen xxx* %1, {absolute4, $1} - -pat lde adi sde $1==$3 && $2==4 call ldexxxsde("add.l") -pat lde adu sde $1==$3 && $2==4 call ldexxxsde("add.l") -pat lde and sde $1==$3 && $2==4 call ldexxxsde("and.l") -pat lde ior sde $1==$3 && $2==4 call ldexxxsde("or.l") -pat lde xor sde $1==$3 && $2==4 call ldexxxsde("eor.l") -#endif - -proc lollilxxxstl example lol lil adi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {indirect_int, regvar($2, reg_pointer)}, {LOCAL, $1} - -pat lol lil adi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(ADD_I) -pat lol lil adu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(ADD_I) -pat lol lil sbi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(SUB_I) -pat lol lil sbu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(SUB_I) -pat lol lil and stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(AND_I) -pat lol lil ior stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(OR_I) - -proc lollfixxxstl example lol LLP lof adi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {offsetted_int, regvar($2, reg_pointer), $3}, {LOCAL, $1} - -pat lol LLP lof adi stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(ADD_I) -pat lol LLP lof adu stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(ADD_I) -pat lol LLP lof sbi stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(SUB_I) -pat lol LLP lof sbu stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(SUB_I) -pat lol LLP lof and stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(AND_I) -pat lol LLP lof ior stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(OR_I) - - -proc lolfrxlolf example LLP lof and LLP stf -with conreg_int-bconst - kills allexceptcon - gen xxx* %1, {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof adi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(ADD_I) -pat LLP lof adu LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(ADD_I) -pat LLP lof and LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(AND_I) -pat LLP lof ior LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(OR_I) -pat LLP lof xor LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(EOR_I) -#if WORD_SIZE!=2 -pat LLP lof ads LLP stf $1==$4 && $2==$5 && $3==4 - && inreg($1)==reg_pointer - call lolfrxlolf("add.l") -#endif - -proc lolfxxlolf example LLP lof and LLP stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off_int, lb, $1, $2} -#else - uses AA_REG={DLOCAL, $1} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat LLP lof adi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(ADD_I) -pat LLP lof adu LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(ADD_I) -pat LLP lof and LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(AND_I) -pat LLP lof ior LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(OR_I) -pat LLP lof xor LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(EOR_I) -#if WORD_SIZE!=2 -pat LLP lof ads LLP stf $1==$4 && $2==$5 && $3==4 - call lolfxxlolf("add.l") -#endif - -#if WORD_SIZE!=2 -proc lilfxxlilf example lil lof and lil stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat lil lof adi lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -pat lil lof adu lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -pat lil lof and lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("and.l") -pat lil lof ior lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("or.l") -pat lil lof xor lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("eor.l") -pat lil lof ads lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -#endif - -proc lefxxxsef example loe lof and loe stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {ABS_off_int, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat LEP lof adi LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(ADD_I) -pat LEP lof adu LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(ADD_I) -pat LEP lof and LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(AND_I) -pat LEP lof ior LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(OR_I) -pat LEP lof xor LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(EOR_I) -#if WORD_SIZE!=2 -pat LEP lof ads LEP stf $1==$4 && $2==$5 && $3==4 - call lefxxxsef("add.l") -#endif - -/* lil gets a word, not necessarily a pointer */ -#if WORD_SIZE!=2 -proc lilixxlili example lil loi and lil sti -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen xxx* %1, {indirect4, %a} -#endif - -pat lil loi adi lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -pat lil loi adu lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -pat lil loi and lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("and.l") -pat lil loi ior lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("or.l") -pat lil loi xor lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("eor.l") -pat lil loi ads lil sti $1==$4 && $2==$3 && $2==$5 && $3==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -#endif - -proc leixxxsei example loe loi and loe sti -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {ABS_off_int, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen xxx* %1, {indirect_int, %a} -#endif - -pat LEP loi adi LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(ADD_I) -pat LEP loi adu LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(ADD_I) -pat LEP loi and LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(AND_I) -pat LEP loi ior LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(OR_I) -pat LEP loi xor LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(EOR_I) -#if WORD_SIZE!=2 -pat LEP loi ads LEP sti $1==$4 && $2==$3 && $2==$5 && $2==4 - call leixxxsei("add.l") -#endif - -proc lofruxxsof example LLP lof inc LLP stf - kills allexceptcon - gen bit* {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof inc LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lofruxxsof(INC) -pat LLP lof dec LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lofruxxsof(DEC) -pat LLP lof ngi LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - && $3==WORD_SIZE - call lofruxxsof(NEG_I) -pat LLP lof com LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - && $3==WORD_SIZE - call lofruxxsof(NOT_I) - -proc lofuxxsof example LLP lof inc LLP stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off_int, lb, $1, $2} -#else - uses AA_REG={DLOCAL,$1} - gen bit* {offsetted_int,%a,$2} -#endif - -pat LLP lof inc LLP stf $1==$4 && $2==$5 - call lofuxxsof(INC) -pat LLP lof dec LLP stf $1==$4 && $2==$5 - call lofuxxsof(DEC) -pat LLP lof ngi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lofuxxsof(NEG_I) -pat LLP lof com LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lofuxxsof(NOT_I) - -#if WORD_SIZE!=2 -proc lifuxxsif example lil lof inc lil stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen bit* {offsetted4,%a,$2} -#endif - -pat lil lof inc lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lifuxxsif("add.l #1,") -pat lil lof dec lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lifuxxsif("sub.l #1,") -pat lil lof ngi lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lifuxxsif("neg.l") -pat lil lof com lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lifuxxsif("not.l") -#endif - -#if WORD_SIZE!=2 -proc liiuxxsii example lil loi inc lil sti - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen bit* {indirect4, %a} -#endif - -pat lil loi inc lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - call liiuxxsii("add.l #1,") -pat lil loi dec lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - call liiuxxsii("sub.l #1,") -pat lil loi ngi lil sti $1==$4 && $2==4 && $5==4 && $3==4 && inreg($1)==reg_pointer - call liiuxxsii("neg.l") -pat lil loi com lil sti $1==$4 && $2==4 && $5==4 && $3==4 && inreg($1)==reg_pointer - call liiuxxsii("not.l") -#endif - -proc lefuxxsef example loe lof inc loe stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {ABS_off_int, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen bit* {offsetted_int, %a, $2} -#endif - -pat LEP lof inc LEP stf $1==$4 && $2==$5 - call lefuxxsef(INC) -pat LEP lof dec LEP stf $1==$4 && $2==$5 - call lefuxxsef(DEC) -pat LEP lof ngi LEP stf $1==$4 && $2==$5 && $3==4 - call lefuxxsef(NEG_I) -pat LEP lof com LEP stf $1==$4 && $2==$5 && $3==4 - call lefuxxsef(NOT_I) - -proc leiuxxsei example loe loi inc loe sti - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {ABS_off_int, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen bit* {indirect_int, %a} -#endif - -pat LEP loi inc LEP sti $1==$4 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(INC) -pat LEP loi dec LEP sti $1==$4 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(DEC) -pat LEP loi ngi LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(NEG_I) -pat LEP loi com LEP sti $1==$4 && $2==$3 && 2==$5 && $2==WORD_SIZE - call leiuxxsei(NOT_I) - -proc lolcxxstl example lol loc and stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {const, $2}, {LOCAL, $1} - -/* -pat lol loc adi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(ADD_I) -pat lol loc adu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol loc sbi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(SUB_I) -pat lol loc sbu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(SUB_I) -/* -pat lol loc and stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(AND_I) -pat lol loc ior stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(OR_I) -pat lol loc xor stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(EOR_I) - peephole optimizer replaces these -*/ -#if TBL68020 || WORDSIZE==2 -#if WORD_SIZE==4 -pat lol loc dvi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(DIVS_I) -pat lol loc dvu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(DIVU_I) -#endif -pat lol loc mli stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(MULS_I) -pat lol loc mlu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(MULU_I) -#endif - -proc lolcxxxstl example lol loc adi stl - kills all_indir, LOCAL %bd==$1 - gen xxx* {const, $2}, {LOCAL, $1} - -/* -pat lol loc adi stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(ADD_I) -pat lol loc adu stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol loc sbi stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(SUB_I) -pat lol loc sbu stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(SUB_I) -/* -pat lol loc and stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(AND_I) -pat lol loc ior stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(OR_I) -pat lol loc xor stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(EOR_I) - peephole optimizer replaces these -*/ -#if WORD_SIZE==2 -proc ldlcxxxsdl example ldl ldc adi sdl - kills all_indir, DLOCAL %bd==$1 - gen xxx* {const4, $2}, {DLOCAL, $1} - -pat ldl ldc sbi sdl $1==$4 && $3==4 call ldlcxxxsdl("sub.l") -pat ldl ldc sbu sdl $1==$4 && $3==4 call ldlcxxxsdl("sub.l") -#endif - -proc lilcxxsil example lil loc and sil - kills allexceptcon - gen xxx* {const, $2}, {indirect_int, regvar($1, reg_pointer)} - -pat lil loc adi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(ADD_I) -pat lil loc adu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(ADD_I) -pat lil loc sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(SUB_I) -pat lil loc sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(SUB_I) -pat lil loc and sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(AND_I) -pat lil loc ior sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(OR_I) -pat lil loc xor sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(EOR_I) - -proc lilcxxxsil example lil loc adi sil - kills allexceptcon -#if TBL68020 - gen xxx* {const, $2}, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* {const, $2}, {indirect_int, %a} -#endif - -pat lil loc adi sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(ADD_I) -pat lil loc adu sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(ADD_I) -pat lil loc sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(SUB_I) -pat lil loc sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(SUB_I) -pat lil loc and sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(AND_I) -pat lil loc ior sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(OR_I) -pat lil loc xor sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(EOR_I) - -proc loecxxxste example loe loc adi ste - kills posextern - gen xxx* {const, $2}, {absolute4, $1} - -/* -pat loe loc adi ste $1==$4 && $3==WORD_SIZE call loecxxxste(ADD_I) -pat loe loc adu ste $1==$4 && $3==WORD_SIZE call loecxxxste(ADD_I) - peephole optimizer replaces these -*/ -pat loe loc sbi ste $1==$4 && $3==WORD_SIZE call loecxxxste(SUB_I) -pat loe loc sbu ste $1==$4 && $3==WORD_SIZE call loecxxxste(SUB_I) -/* -pat loe loc and ste $1==$4 && $3==WORD_SIZE call loecxxxste(AND_I) -pat loe loc ior ste $1==$4 && $3==WORD_SIZE call loecxxxste(OR_I) -pat loe loc xor ste $1==$4 && $3==WORD_SIZE call loecxxxste(EOR_I) - peephole optimizer replaces these -*/ - -proc lolrxxstl example lol lol and stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {LOCAL, $2}, {LOCAL, $1} - -/* -pat lol lol adi stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(ADD_I) -pat lol lol adu stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol lol sbi stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(SUB_I) -pat lol lol sbu stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(SUB_I) -/* -pat lol lol and stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(AND_I) -pat lol lol ior stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(OR_I) -pat lol lol xor stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(EOR_I) - peephole optimizer replaces these -*/ - -proc lolrxxxstl example lol lol adi stl - kills all_indir, LOCAL %bd==$1 - gen xxx* {LOCAL, $2}, {LOCAL, $1} - -/* -pat lol lol adi stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(ADD_I) -pat lol lol adu stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(ADD_I) - peephole optimizer replaces these -*/ -#if WORD_SIZE!=2 -pat lol lol ads stl $1==$4 && $3==4 && inreg($2)==reg_any - call lolrxxxstl("add.l") -#endif -pat lol lol sbi stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(SUB_I) -pat lol lol sbu stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(SUB_I) -/* -pat lol lol and stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && inreg($1)!=reg_pointer - call lolrxxxstl(AND_I) -pat lol lol ior stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && - inreg($1)!=reg_pointer - call lolrxxxstl(OR_I) -pat lol lol xor stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && - inreg($1)!=reg_pointer - call lolrxxxstl(EOR_I) - peephole optimizer replaces these -*/ - -proc lilrxxsil example lil lol and sil - kills allexceptcon - gen xxx* {LOCAL, $2}, {indirect_int, regvar($1, reg_pointer)} - -pat lil lol adi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(ADD_I) -pat lil lol adu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(ADD_I) -pat lil lol sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(SUB_I) -pat lil lol sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(SUB_I) -pat lil lol and sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(AND_I) -pat lil lol ior sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(OR_I) -pat lil lol xor sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil lol ads sil $1==$4 && $3==4 && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil("add.l") -#endif - -proc lilrxxxsil example lil lol adi sil - kills allexceptcon -#if TBL68020 - gen xxx* {LOCAL, $2}, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* {LOCAL, $2}, {indirect_int, %a} -#endif - -pat lil lol adi sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(ADD_I) -pat lil lol adu sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(ADD_I) -pat lil lol sbi sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(SUB_I) -pat lil lol sbu sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(SUB_I) -pat lil lol and sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(AND_I) -pat lil lol ior sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(OR_I) -pat lil lol xor sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil lol ads sil $1==$4 && $3==4 && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil("add.l") -#endif - -proc loerxxxste example loe lol adi ste - kills posextern - gen xxx* {LOCAL, $2}, {absolute_int, $1} - -pat loe lol adi ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(ADD_I) -pat loe lol adu ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(ADD_I) -pat loe lol sbi ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(SUB_I) -pat loe lol sbu ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(SUB_I) -pat loe lol and ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(AND_I) -pat loe lol ior ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(OR_I) -pat loe lol xor ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(EOR_I) -#if WORD_SIZE!=2 -pat loe lol ads ste $1==$4 && $3==4 && inreg($2)==reg_any - call loerxxxste("add.l") -#endif - -proc xxxstl example adi stl -with any_int-RD_REG-dreg_int any-RD_REG-dreg_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %2,{dreg_int, regvar($2)} - xxx* %1,{LOCAL,$2} -with exact any_int-RD_REG-dreg_int STACK - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move_i {post_inc_int, sp}, {dreg_int, regvar($2)} - xxx* %1,{LOCAL,$2} - -pat adi stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(ADD_I) -pat adu stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(ADD_I) -pat sbi stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(SUB_I) -pat sbu stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(SUB_I) -pat and stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(AND_I) -pat ior stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(OR_I) - -pat xor stl $1==WORD_SIZE && inreg($2)==reg_any -with D_REG any_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %2,{dreg_int, regvar($2)} - eor_i %1,{dreg_int, regvar($2)} - -pat ads SLP $1==4 && inreg($2)==reg_pointer -with any4-areg-RA_REG any4+address-areg-RA_REG - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move %2,{areg,regvar($2,reg_pointer)} - add_l %1,{areg,regvar($2,reg_pointer)} -#ifdef TBL68020 -with regX any4+address-areg-RA_REG - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move %2,{areg,regvar($2,reg_pointer)} - move {regAregXcon, regvar($2,reg_pointer), %1.xreg, %1.sc, 0},{areg,regvar($2,reg_pointer)} -with exact regX STACK - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l {post_inc4, sp},{areg,regvar($2,reg_pointer)} - move {regAregXcon, regvar($2,reg_pointer), %1.xreg, %1.sc, 0},{areg,regvar($2,reg_pointer)} -with exact regX regAcon - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {regAregXcon, %2.reg, %1.xreg, %1.sc, %2.bd},{areg,regvar($2,reg_pointer)} -with exact regX local_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {regAregXcon, lb, %1.xreg, %1.sc, %2.bd},{areg,regvar($2,reg_pointer)} -#ifdef FANCY_MODES -with exact regX indirect4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg,%1.sc,0,0},{areg,regvar($2,reg_pointer)} -with exact regX offsetted4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg, %1.sc, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX LOCAL - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, lb, %1.xreg, %1.sc, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX off_con - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg,%1.sc,%2.bd,%2.od},{areg,regvar($2,reg_pointer)} -with exact regX ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move{ext_regX, %1.sc, %1.xreg, %2.bd},{areg,regvar($2,reg_pointer)} -with exact regX absolute4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %1.sc, %1.xreg, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX abs_con - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %1.sc, %1.xreg, %2.bd, %2.od},{areg,regvar($2,reg_pointer)} -with exact indirect4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, %1.reg, 0, %2.bd},{areg,regvar($2,reg_pointer)} -with exact offsetted4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, %1.reg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact LOCAL ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, lb, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact index_off4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {indoff_con, %1.reg, %1.xreg, %1.sc,%1.bd,%2.bd},{areg,regvar($2,reg_pointer)} -with exact absolute4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_con, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact abs_index4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {absind_con, %1.sc, %1.xreg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact indirect4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %1.reg, %2.xreg, %2.sc, 0, %2.bd},{areg,regvar($2,reg_pointer)} -with exact offsetted4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %1.reg, %2.xreg,%2.sc,%1.bd,%2.bd},{areg,regvar($2,reg_pointer)} -with exact LOCAL ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, lb, %2.xreg, %2.sc, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact absolute4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %2.sc, %2.xreg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - - -proc xxxdupstl example adi dup stl -with any_int-RD_REG-dreg_int any-RD_REG-dreg_int - kills regvar($3, reg_any), use_index %xreg==regvar($3, reg_any) - gen move %2,{dreg_int, regvar($3)} - xxx* %1,{LOCAL,$3} yields {LOCAL, $3} -with exact any_int-RD_REG-dreg_int STACK - kills regvar($3, reg_any), use_index %xreg==regvar($3, reg_any) - gen move_i {post_inc_int, sp}, {dreg_int, regvar($3)} - xxx* %1,{LOCAL,$3} yields {LOCAL, $3} - -pat adi dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(ADD_I) -pat adu dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(ADD_I) -pat sbi dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(SUB_I) -pat sbu dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(SUB_I) -pat and dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(AND_I) -pat ior dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(OR_I) -/* -pat xor dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(EOR_I) - incorrect for eor.l !!! -*/ - -pat dup stl $1==WORD_SIZE && inreg($2)==reg_any -with any_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %1,{dreg_int, regvar($2,reg_any)} - yields {LOCAL, $2} - -pat dup stl $1==4 && inreg($2)==reg_pointer -with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{areg, regvar($2, reg_pointer)} - yields {DLOCAL, $2} - -pat dup LLP sti LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==1 && $5==1 - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{post_inc1, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==1 && $5==1 - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{post_inc1, regvar($2,reg_pointer)} - beq {llabel, $7} - -/* Normally, LLP sti wth word size will be optimized to sil */ -pat dup LLP sti LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==2 && $5==2 - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{post_inc2, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==2 && $5==2 - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{post_inc2, regvar($2,reg_pointer)} - beq {llabel, $7} - -#if WORD_SIZE!=2 -/* m68k2 can't do zne/zeq on 4-byte */ -pat dup LLP sti LLP adp SLP zne $1==4 && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==4 && $5==4 - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{post_inc4, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==4 && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==4 && $5==4 - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{post_inc4, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -pat dup sil LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$3 && $3==$5 && $4==WORD_SIZE - with any_int - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_i %1,{post_inc_int, regvar($2, reg_pointer)} - bne {llabel, $6} - -pat dup sil LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$3 && $3==$5 && $4==WORD_SIZE - with any_int - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_i %1,{post_inc_int, regvar($2, reg_pointer)} - beq {llabel, $6} - -pat sil lil LLP adp SLP zne $1==$2 && $2==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - with any_int - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_i %1,{post_inc_int, regvar($1,reg_pointer)} - bne {llabel, $6} - -pat sil lil LLP adp SLP zeq $1==$2 && $2==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - with any_int - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_i %1,{post_inc_int, regvar($1,reg_pointer)} - beq {llabel, $6} - -pat dup LLP adp SLP LLP sti zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==1 && $4==(0-1) - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{pre_dec1, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP adp SLP LLP sti zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==1 && $4==(0-1) - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{pre_dec1, regvar($2,reg_pointer)} - beq {llabel, $7} - -#if WORD_SIZE!=2 -pat dup LLP adp SLP LLP sti zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==2 && $4==(0-2) - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{pre_dec2, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP adp SLP LLP sti zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==2 && $4==(0-2) - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{pre_dec2, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -#if WORD_SIZE!=2 -pat dup lol adp stl lol sti zne $1==4 && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==4 && $4==(0-4) - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{pre_dec4, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup lol adp stl lol sti zeq $1==4 && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==4 && $4==(0-4) - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{pre_dec4, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -pat LLP ads SLP $1==$3 && $2==4 && inreg($1)==reg_pointer - with data4-sconsts - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l %1, {DLOCAL, $1} - -pat lil dup inc sil $1==$4 && $2==WORD_SIZE && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen add_i {const, 1}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup dec sil $1==$4 && $2==WORD_SIZE && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen sub_i {const, 1}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat LLP LFP dup adp LLP SFP sti $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {offsetted4, regvar($1, reg_pointer), $2} - gen add_l {const4, $4}, {offsetted4, regvar($1, reg_pointer), $2} - killreg %a - yields %1 %a leaving sti $7 - -pat LLP LFP dup adp LLP SFP $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {offsetted4, regvar($1, reg_pointer), $2} - gen add_l {const4, $4}, {offsetted4, regvar($1, reg_pointer), $2} - killreg %a - yields %a - -pat LLP LFP dup adp LLP SFP sti $3==4 && $1==$5 && $2==$6 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {DLOCAL, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat LLP LFP dup adp LLP SFP $3==4 && $1==$5 && $2==$6 - kills allexceptcon - uses AA_REG = {DLOCAL, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b - -pat LEP LFP dup adp LEP SFP sti $3==4 && $1==$5 && $2==$6 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat LEP LFP dup adp LEP SFP $3==4 && $1==$5 && $2==$6 - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b - -#if WORD_SIZE!=2 -pat lil lof dup adp lil stf sti $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat lil lof dup adp lil stf $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b -#endif /* WORD_SIZE==2 */ - -pat LEP loi dup adp LEP sti sti $3==4 && $1==$5 && $2==4 && $6==4 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %1 %b leaving sti $7 - -pat LEP loi dup adp LEP sti $3==4 && $1==$5 && $2==4 && $6==4 - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %b - -#if WORD_SIZE!=2 -pat lil loi dup adp lil sti sti $3==4 && $1==$5 && $2==4 && $6==4 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %1 %b leaving sti $7 - -pat lil loi dup adp lil sti $3==4 && $1==$5 && $2==4 && $6==4 - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %b -#endif - -pat LLP dup adp SLP lae cmp $1==$4 && $2==4 && inreg($1)==reg_pointer && $3 < 0 - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen sub_l {const4,0-$3},{DLOCAL,$1} - yields {DLOCAL,$1} {ext_addr, $5+$3} - leaving cmu 4 - -pat LLP dup adp SLP lae cmp $1==$4 && $2==4 && inreg($1)==reg_pointer && $3 > 0 - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l {const4,$3},{DLOCAL,$1} - yields {DLOCAL,$1} {ext_addr, $5+$3} - leaving cmu 4 - -pat LLP dup adp SLP loi $1==$4 && $2==4 && $3==4 && $5==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc4, regvar($1, reg_pointer)} - -pat LLP dup adp SLP loi $1==$4 && $2==4 && $3==$5 && inreg($1)==reg_pointer - leaving LLP $1 loi $5 LLP $4 adp $3 SLP $4 - -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc1, regvar($1, reg_pointer)} - -/* Normally, LLP loi will be optimized to lil */ -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc2, regvar($1, reg_pointer)} - -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc4, regvar($1, reg_pointer)} - -pat lil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc_int, regvar($1, reg_pointer)} - -pat LLP dup adp SLP sti $1==$4 && $2==4 && $3==$5 && inreg($1)==reg_pointer - leaving LLP $1 sti $5 LLP $4 adp $3 SLP $4 - -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 && - inreg($1)==reg_pointer -with any1 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc1, regvar($1, reg_pointer)} - -/* Normally, LLP sti will ve optimzed into sil */ -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 && - inreg($1)==reg_pointer -with any2 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc2, regvar($1, reg_pointer)} - -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 && - inreg($1)==reg_pointer -with any4 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc4, regvar($1, reg_pointer)} - -pat LLP dup adp SLP sti $1==$4 && $2==4 && $3==WORD_SIZE && $5==WORD_SIZE && - inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc_int, regvar($1, reg_pointer)} - -pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc_int, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec1, regvar($1, reg_pointer)} - -/* Normally, LLP loi will be optimized to lil */ -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-2 && $5==2 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec2, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-4 && $5==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec4, regvar($1, reg_pointer)} - -pat LLP adp SLP lil $1==$3 && $1==$4 && $2==0-WORD_SIZE && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec_int, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 && - inreg($1)==reg_pointer -with any1 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec1, regvar($1, reg_pointer)} - -#if WORD_SIZE!=2 -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 && - inreg($1)==reg_pointer -with any2 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec2, regvar($1, reg_pointer)} -#else -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 && - inreg($1)==reg_pointer -with any4 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec4, regvar($1, reg_pointer)} -#endif - -pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE && - inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec_int, regvar($1, reg_pointer)} - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer && directadd($3) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1} - gen add_l {const4, $3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer && directsub($3) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1} - gen sub_l {const4, 0-$3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3} - gen add_l %b, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && directadd($3) - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1} - gen add_l {const4, $3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && directsub($3) - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1} - gen sub_l {const4, 0-$3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3} - gen add_l %b, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l {const4, $2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen sub_l {const4, 0-$2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses DD_REG4 = {const4, $2} - gen add_l %a, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && directadd($2) - kills all_indir, DLOCAL %bd==$1 - gen add_l {const4, $2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && directsub($2) - kills all_indir, DLOCAL %bd==$1 - gen sub_l {const4, 0-$2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 - kills all_indir, DLOCAL %bd==$1 - uses DD_REG4 = {const4, $2} - gen add_l %a, {DLOCAL, $1} - -#if WORD_SIZE!=2 -pat lil dup adp sil sti $1==$4 && $2==4 && inreg($1)==reg_pointer && $5<=4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)} - gen add_l {const, $3}, {indirect4, regvar($1, reg_pointer)} - killreg %a - yields %1 %a leaving sti $5 - -pat lil dup adp sil $1==$4 && $2==4 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)} - gen add_l {const, $3}, {indirect4, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup adp sil $1==$4 && $2==4 - kills allexceptcon - uses AA_REG, AA_REG = {LOCAL, $1} - gen move {indirect4, %b}, %a - add_l {const, $3}, {indirect4, %b} - killreg %a - yields %a - -pat lil adp sil $1==$3 && inreg($1)==reg_pointer - kills allexceptcon - gen add_l {const, $2}, {indirect4, regvar($1, reg_pointer)} - -pat lil adp sil $1==$3 && inreg($1)!=reg_any - kills allexceptcon -#if TBL68020 /* WORD_SIZE==4 */ - gen add_l {const, $2}, {ILOCAL,$1} -#else - uses AA_REG = {LOCAL, $1} - gen add_l {const, $2}, {indirect4, %a} -#endif -#endif /* WORD_SIZE==2 */ - -pat LEP dup adp SEP $1==$4 && $2==4 - kills posextern - uses AA_REG = {absolute4, $1} - gen add_l {const4, $3}, {absolute4, $1} - killreg %a - yields %a - -pat LEP adp SEP $1==$3 - kills posextern - gen add_l {const4, $2}, {absolute4, $1} - -pat loc and $1==255 && $2==WORD_SIZE -#if WORD_SIZE==2 - with exact absolute_int yields {absolute1,%1.bd+1} - with exact offsetted_int yields {offsetted1,%1.reg,%1.bd+1} - with exact LOCAL yields {offsetted1,lb,%1.bd+1} -#else - with exact absolute_int yields {absolute1,%1.bd+3} - with exact offsetted_int yields {offsetted1,%1.reg,%1.bd+3} - with exact LOCAL yields {offsetted1,lb,%1.bd+3} -#endif - with yields {const, $1} leaving and WORD_SIZE - -/************************************************ - * Group 1: load instructions * - ************************************************/ - -pat loc $1==0 yields {zero_const, $1} - -pat loc small($1) yields {small_const, $1} - -pat loc in_1($1) yields {bconst, $1} - -pat loc yields {const, $1} - -#if WORD_SIZE!=2 -pat ldc leaving loc 18 trp -#else -pat ldc highw($1)==0 && loww($1)==0 yields {zero_const4, 0} - -pat ldc highw($1)==0 && small(loww($1)) yields {small_const4, loww($1)} - -pat ldc highw($1)==0 && in_1(loww($1)) yields {bconst4, loww($1)} - -pat ldc yields {const4, $1} -#endif - -pat LLP inreg($1)==reg_pointer - kills pre_post %reg==regvar($1, reg_pointer) - yields {DLOCAL, $1} - -pat lol yields {LOCAL, $1} - -#if WORD_SIZE!=2 -pat ldl leaving lol $1+4 lol $1 -#else -pat ldl yields {DLOCAL, $1} -#endif - -pat loe yields {absolute_int, $1} - -/* replace ste loe by dup ste, but not if followed by a test ... */ -proc steloezxx example ste loe zne -with any_int-sconsts - kills posextern - gen move_i %1, {absolute_int, $1} - bxx* {llabel, $3} -with exact STACK - kills posextern - gen move_i {post_inc_int, sp}, {absolute_int, $1} - bxx* {llabel, $3} - -pat ste loe zlt $1==$2 call steloezxx("blt") -pat ste loe zle $1==$2 call steloezxx("ble") -pat ste loe zeq $1==$2 call steloezxx("beq") -pat ste loe zne $1==$2 call steloezxx("bne") -pat ste loe zge $1==$2 call steloezxx("bge") -pat ste loe zgt $1==$2 call steloezxx("bgt") - -pat ste loe $1==$2 leaving dup WORD_SIZE ste $1 - -pat lil inreg($1)==reg_pointer - kills pre_post %reg==regvar($1, reg_pointer) - yields {indirect_int, regvar($1, reg_pointer)} -#if WORD_SIZE==4 -pat lil inreg($1)==reg_any - uses AA_REG = {DLOCAL, $1} - yields {indirect_int, %a} -#endif - -pat lil -#if TBL68020 - yields {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - yields {indirect_int, %a} -#endif - - /* When using the 'offsetted' intructions regAregXcon cannot be used - * for the m68k[24]; there is no way of knowing about the size of - * %1.bd+$1, because expressions are not allowed in stack patterns, and - * this may lead to outputting too large displacements. With regAcon - * the chance that this will happen is very slim, because it can - * have displacements of 16 bits. Besides, leaving out regAcon here - * would make it very hard to handle this instruction efficiently. - */ -pat lof -with A_REG yields {offsetted_int, %1, $1} -with exact local_addr yields {LOCAL, %1.bd+$1} -with exact ext_addr yields {absolute_int, %1.bd+$1} -#ifndef TBL68020 -with regAcon yields {offsetted_int, %1.reg, %1.bd+$1} -#else /* TBL68020 */ -with exact regAcon yields {offsetted_int, %1.reg, %1.bd+$1} -with exact regAregXcon yields {index_off_int, %1.reg, %1.xreg, %1.sc, %1.bd+$1} -#ifdef FANCY_MODES -with exact offsetted4 yields {OFF_off_int, %1.reg, %1.bd, $1} -with exact indirect yields {OFF_off_int, %1.reg, 0, $1} -with exact DLOCAL yields {OFF_off_int, lb, %1.bd, $1} -with exact off_con yields {OFF_off_int, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 yields {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con yields {INDOFF_off_int, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon yields {OFF_indoff_int, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 yields {ABS_off_int, %1.bd, $1} -with exact abs_con yields {ABS_off_int, %1.bd, %1.od+$1} -with exact abs_regXcon yields {ABS_indoff_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 yields {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con yields {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX yields {abs_index_int, %1.sc, %1.xreg, %1.bd+$1} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat lal yields {local_addr, $1} - -pat lae yields {ext_addr, $1} - -pat lxl $1==0 yields lb - -pat lxl $1==1 yields {DLOCAL, SL} - -pat lxl $1==2 -#if TBL68020 && FANCY_MODES - yields {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - yields {offsetted4, %a, SL} -#endif - -pat lxl $1==3 -#if TBL68020 && FANCY_MODES - uses AA_REG = {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - gen move_l {offsetted4, %a, SL}, %a -#endif - yields {offsetted4, %a, SL} - -pat lxl $1>3 - uses AA_REG = {DLOCAL, SL}, - DD_REG4 = {const, $1-2} - gen 1: - move_l {offsetted4, %a, SL} ,%a - dbf %b, {slabel, 1b} - yields %a - -pat lxa $1==0 yields {local_addr, SL} - -pat lxa $1==1 -#if TBL68020 && FANCY_MODES - yields {off_con, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - yields {regAcon, %a, SL} -#endif - -pat lxa $1==2 -#if TBL68020 && FANCY_MODES - uses AA_REG = {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - gen move_l {offsetted4, %a, SL}, %a -#endif - yields {regAcon, %a, SL} - -pat lxa $1>2 - uses AA_REG = {DLOCAL, SL}, - DD_REG4 = {const, $1-2} - gen 1: - move_l {offsetted4, %a, SL} ,%a - dbf %b, {slabel, 1b} - yields {regAcon, %a, SL} - -pat loi $1==1 -with A_REG yields {indirect1, %1} -with exact local_addr yields {offsetted1, lb, %1.bd} -with exact ext_addr yields {absolute1, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted1, %1.reg, %1.bd} -with regAregXcon yields {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted1, %1.reg, %1.bd} -with exact regAregXcon yields {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off1, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off1, %1.reg, %1.bd, 0} -with exact LOCAL yields {OFF_off1, lb, %1.bd, 0} -with exact off_con yields {OFF_off1, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off1, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff1, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off1, %1.bd, 0} -with exact abs_con yields {ABS_off1, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off1, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index1, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat loi $1==2 -with A_REG yields {indirect2, %1} -#if WORD_SIZE!=2 -with exact local_addr yields {offsetted2, lb, %1.bd} -#else -with exact local_addr yields {LOCAL, %1.bd} -#endif -with exact ext_addr yields {absolute2, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted2, %1.reg, %1.bd} -with regAregXcon yields {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted2, %1.reg, %1.bd} -with exact regAregXcon yields {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==2 -with exact DLOCAL yields {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off2, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off2, %1.reg, %1.bd, 0} -with exact LOCAL yields {OFF_off2, lb, %1.bd, 0} -with exact off_con yields {OFF_off2, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off2, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff2, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off2, %1.bd, 0} -with exact abs_con yields {ABS_off2, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off2, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index2, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat loi $1==4 -with A_REG yields {indirect4, %1} -with exact local_addr yields {DLOCAL, %1.bd} -with exact ext_addr yields {absolute4, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted4, %1.reg, %1.bd} -with regAregXcon yields {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted4, %1.reg, %1.bd} -with exact regAregXcon yields {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==4 -with exact LOCAL yields {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off4, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off4, %1.reg, %1.bd, 0} -with exact off_con yields {OFF_off4, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off4, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff4, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off4, %1.bd, 0} -with exact abs_con yields {ABS_off4, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off4, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index4, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat loi $1==6 -with AA_REG - yields {offsetted2, %1, 4} {indirect4, %1} -with exact local_addr - yields {offsetted2, lb, %1.bd+4} {offsetted4, lb, %1.bd} -with exact ext_addr - yields {absolute2, %1.bd + 4} {absolute4, %1.bd} -#endif - -pat loi $1==8 -#if WORD_SIZE!=2 - leaving ldf 0 -#else -with AA_REG - yields {offsetted4, %1, 4} {indirect4, %1} -with exact local_addr - yields {offsetted4, lb, %1.bd+4} {offsetted4, lb, %1.bd} -with exact ext_addr - yields {absolute4, %1.bd + 4} {absolute4, %1.bd} -#endif - -#if WORD_SIZE==4 -pat loi $1==3*WORD_SIZE -with AA_REG STACK - kills ALL - uses DD_REG4={const,$1} - gen add_l %a, %1 - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - -pat loi $1==4*WORD_SIZE -with AA_REG STACK - kills ALL - uses DD_REG4={const4,$1} - gen add_l %a, %1 - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} -#endif - -pat loi $1>4*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG STACK - kills ALL - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen add_l {const4, $1}, %1 - 1: - move_i {pre_dec_int, %1}, {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat loi -with STACK - kills ALL - gen move_i {const,$1},{pre_dec_int, sp} - jsr {absolute4, ".los"} - -pat los $1==WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".los"} -#if WORD_SIZE==2 -pat los $1==4 -with STACK - kills ALL - gen jsr {absolute4, ".los4"} -#endif - -pat lde -#if WORD_SIZE==2 - yields {absolute4, $1} -#else - yields {absolute4, $1+4} - {absolute4, $1} -#endif - -pat ldf -#if WORD_SIZE==2 -with A_REG yields {offsetted4, %1, $1} -with exact local_addr yields {DLOCAL, %1.bd+$1} -with regAcon yields {offsetted4, %1.reg, %1.bd+$1} -#else -with A_REG yields {offsetted4, %1, $1+4} - {offsetted4, %1, $1} -with exact local_addr yields {LOCAL, %1.bd+$1+4} - {LOCAL, %1.bd+$1} -with regAcon yields {offsetted4, %1.reg, %1.bd+$1+4} - {offsetted4, %1.reg, %1.bd+$1} -#endif - -pat lpi yields {ext_addr, $1} - -/************************************************ - * Group 2: store instructions * - ************************************************/ - -pat stl inreg($1)==reg_any -with exact memory1-consts - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - move_b %1, {dreg1, regvar($1,reg_any)} -#if WORD_SIZE==2 -with any2 - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move %1, {LOCAL, $1} -#else -with exact memory2-consts - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - move_w %1, {dreg2, regvar($1,reg_any)} -with store4 - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move %1, {LOCAL, $1} -#endif -with exact STACK - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move_i {post_inc_int, sp}, {LOCAL, $1} - -pat SLP inreg($1)==reg_pointer -with any4 -#if WORD_SIZE!=2 - -sconsts4 -#endif - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move %1, {areg, regvar($1, reg_pointer)} -with exact ext_addr - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_l %1, {areg, regvar($1, reg_pointer)} -with address-ext_addr - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen lea %1, {areg, regvar($1, reg_pointer)} -with exact STACK - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_l {post_inc4, sp}, {areg, regvar($1, reg_pointer)} - -pat stl -with store_int-sconsts - kills all_indir, LOCAL %bd==$1 - gen move %1, {LOCAL, $1} -with exact STACK - kills all_indir, LOCAL %bd==$1 - gen move_i {post_inc_int,sp}, {LOCAL, $1} - -pat ste -with store_int-sconsts - kills posextern - gen move %1, {absolute_int, $1} -with exact STACK - kills posextern - gen move_i {post_inc_int, sp}, {absolute_int, $1} - -pat sil inreg($1)==reg_pointer -with store_int-sconsts - kills allexceptcon - gen move %1, {indirect_int, regvar($1, reg_pointer)} -with exact STACK - kills allexceptcon - gen move_i {post_inc_int, sp}, {indirect_int, regvar($1, reg_pointer)} - -#if WORD_SIZE==4 -pat sil inreg($1)==reg_any -with store_int-sconsts - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move %1, {indirect_int, %a} -with exact STACK - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move_i {post_inc_int, sp}, {indirect_int, %a} -#endif - -pat sil -#if TBL68020 -with store_int-sconsts - kills allexceptcon - gen move %1, {ILOCAL, $1} -with exact STACK - kills allexceptcon - gen move_i {post_inc_int, sp}, {ILOCAL, $1} -#else -with store_int-sconsts - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move %1, {indirect_int, %a} -with exact STACK - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move_i {post_inc_int, sp}, {indirect_int, %a} -#endif - -pat stf -with A_REG store_int-sconsts - kills allexceptcon - gen move %2, {offsetted_int, %1, $1} -with exact any4 STACK - kills allexceptcon - uses AA_REG = %1 - gen move_i {post_inc_int, sp}, {offsetted_int, %a, $1} -with exact STACK - kills allexceptcon - uses AA_REG - gen move_l {post_inc4, sp}, %a - move_i {post_inc_int, sp}, {offsetted_int, %a, $1} -with exact local_addr store_int - kills allexceptcon - gen move %2, {LOCAL, %1.bd+$1} -with exact ext_addr store_int - kills allexceptcon - gen move %2, {absolute_int, %1.bd+$1} -#if TBL68000 -#if WORD_SIZE==4 -with regAcon store_int - kills allexceptcon - gen move %2, {offsetted_int, %1.reg, %1.bd+$1} -#endif -#else /* TBL68020 */ -with exact regAcon store_int - kills allexceptcon - gen move %2, {offsetted_int, %1.reg, %1.bd+$1} -with exact regAregXcon store_int - kills allexceptcon - gen move %2, {index_off_int, %1.reg, %1.xreg, %1.sc, %1.bd+$1} -#ifdef FANCY_MODES -with exact indirect4 store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, 0, $1} -with exact offsetted4 store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, %1.bd, $1} -with exact DLOCAL store_int - kills allexceptcon - gen move %2, {OFF_off_int, lb, %1.bd, $1} -with exact off_con store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 store_int - kills allexceptcon - gen move %2, {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con store_int - kills allexceptcon - gen move %2, {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon store_int - kills allexceptcon - gen move %2, {OFF_indoff_int, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 store_int - kills allexceptcon - gen move %2, {ABS_off_int, %1.bd, $1} -with exact abs_con store_int - kills allexceptcon - gen move %2, {ABS_off_int, %1.bd, %1.od+$1} -with exact abs_regXcon store_int - kills allexceptcon - gen move %2, {ABS_indoff_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 store_int - kills allexceptcon - gen move %2, {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con store_int - kills allexceptcon - gen move %2, {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX store_int - kills allexceptcon - gen move %2, {abs_index_int, %1.sc, %1.xreg, %1.bd+$1} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==1 -with A_REG any1 - kills allexceptcon - gen move %2, {indirect1, %1} -with local_addr any1 - kills allexceptcon - gen move %2, {offsetted1, lb, %1.bd} -with exact ext_addr any1 - kills allexceptcon - gen move %2, {absolute1, %1.bd} -#ifndef TBL68020 -with regAcon any1 - kills allexceptcon - gen move %2, {offsetted1, %1.reg, %1.bd} -with regAregXcon any1 - kills allexceptcon - gen move %2, {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon any1 - kills allexceptcon - gen move %2, {offsetted1, %1.reg, %1.bd} -with exact regAregXcon any1 - kills allexceptcon - gen move %2, {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#ifdef FANCY_MODES -with exact indirect4 any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, 0, 0} -with exact offsetted4 any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, %1.bd, 0} -with exact LOCAL any1 - kills allexceptcon - gen move %2, {OFF_off1, lb, %1.bd, 0} -with exact off_con any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, %1.bd, %1.od} -with exact index_off4 any1 - kills allexceptcon - gen move %2, {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con any1 - kills allexceptcon - gen move %2, {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon any1 - kills allexceptcon - gen move %2, {OFF_indoff1, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 any1 - kills allexceptcon - gen move %2, {ABS_off1, %1.bd, 0} -with exact abs_con any1 - kills allexceptcon - gen move %2, {ABS_off1, %1.bd, %1.od} -with exact abs_regXcon any1 - kills allexceptcon - gen move %2, {ABS_indoff1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 any1 - kills allexceptcon - gen move %2, {ABSIND_off1, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con any1 - kills allexceptcon - gen move %2, {ABSIND_off1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX any1 - kills allexceptcon - gen move %2, {abs_index1, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==2 -with A_REG any2 - kills allexceptcon - gen move %2, {indirect2, %1} -with local_addr any2 - kills allexceptcon - gen move %2, {offsetted2, lb, %1.bd} -with exact ext_addr any2 - kills allexceptcon - gen move %2, {absolute2, %1.bd} -#ifndef TBL68020 -with regAcon any2 - kills allexceptcon - gen move %2, {offsetted2, %1.reg, %1.bd} -with regAregXcon any2 - kills allexceptcon - gen move %2, {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon any2 - kills allexceptcon - gen move %2, {offsetted2, %1.reg, %1.bd} -with exact regAregXcon any2 - kills allexceptcon - gen move %2, {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==2 -with exact DLOCAL any2 - kills allexceptcon - gen move %2, {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, 0, 0} -with exact offsetted4 any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, %1.bd, 0} -with exact LOCAL any2 - kills allexceptcon - gen move %2, {OFF_off2, lb, %1.bd, 0} -with exact off_con any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, %1.bd, %1.od} -with exact index_off4 any2 - kills allexceptcon - gen move %2, {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con any2 - kills allexceptcon - gen move %2, {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon any2 - kills allexceptcon - gen move %2, {OFF_indoff2, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 any2 - kills allexceptcon - gen move %2, {ABS_off2, %1.bd, 0} -with exact abs_con any2 - kills allexceptcon - gen move %2, {ABS_off2, %1.bd, %1.od} -with exact abs_regXcon any2 - kills allexceptcon - gen move %2, {ABS_indoff2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 any2 - kills allexceptcon - gen move %2, {ABSIND_off2, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con any2 - kills allexceptcon - gen move %2, {ABSIND_off2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX any2 - kills allexceptcon - gen move %2, {abs_index2, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==4 -with A_REG store4-sconsts4 - kills allexceptcon - gen move %2, {indirect4, %1} -with exact any4 STACK - kills allexceptcon - uses AA_REG = %1 - gen move_l {post_inc4, sp}, {indirect4, %a} -with exact STACK - kills allexceptcon - uses AA_REG - gen move_l {post_inc4, sp}, %a - move_l {post_inc4, sp}, {indirect4, %a} -with exact local_addr store4 - kills allexceptcon - gen move %2, {DLOCAL, %1.bd} -with exact ext_addr store4 - kills allexceptcon - gen move %2, {absolute4, %1.bd} -#ifndef TBL68020 -with regAcon store4-sconsts4 - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd} -with regAregXcon store4-sconsts4 - kills allexceptcon - gen move %2, {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon store4 - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd} -with exact regAregXcon store4 - kills allexceptcon - gen move %2, {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==4 -with exact LOCAL store4 - kills allexceptcon - gen move %2, {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, 0, 0} -with exact offsetted4 store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, %1.bd, 0} -with exact off_con store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, %1.bd, %1.od} -with exact index_off4 store4 - kills allexceptcon - gen move %2, {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con store4 - kills allexceptcon - gen move %2, {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon store4 - kills allexceptcon - gen move %2, {OFF_indoff4, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 store4 - kills allexceptcon - gen move %2, {ABS_off4, %1.bd, 0} -with exact abs_con store4 - kills allexceptcon - gen move %2, {ABS_off4, %1.bd, %1.od} -with exact abs_regXcon store4 - kills allexceptcon - gen move %2, {ABS_indoff4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 store4 - kills allexceptcon - gen move %2, {ABSIND_off4, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con store4 - kills allexceptcon - gen move %2, {ABSIND_off4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX store4 - kills allexceptcon - gen move %2, {abs_index4, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat sti $1==6 -with A_REG any4 any2 - kills ALL - gen move %2, {indirect4, %1} - move %3, {offsetted2, %1, 4} -with AA_REG any4 any2 - kills ALL - gen move %2, {post_inc4, %1} - move %3, {post_inc2, %1} -with exact A_REG STACK - kills ALL - gen move_l {post_inc4, sp}, {indirect4, %1} - move_w {post_inc2, sp}, {offsetted2, %1, 4} -with exact AA_REG STACK - kills ALL - gen move_l {post_inc4, sp}, {post_inc4, %1} - move_w {post_inc2, sp}, {post_inc2, %1} -#endif - -pat sti $1==8 -#if WORD_SIZE!=2 - leaving sdf 0 -#else -with AA_REG any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{indirect4, %1} - move_l %3,{offsetted4, %1, 4} -with exact local_addr any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{offsetted4, lb, %1.bd} - move_l %3,{offsetted4, lb, %1.bd+4} -with exact ext_addr any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{absolute4, %1.bd} - move_l %3,{absolute4, %1.bd+4} -#endif - - -#if WORD_SIZE==4 -pat sti $1==3*WORD_SIZE - with AA_REG STACK - kills ALL - gen move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - -pat sti $1==4*WORD_SIZE - with AA_REG STACK - kills ALL - gen move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} -#endif - -pat sti $1>4*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG STACK - kills ALL - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - move_i {post_inc_int, sp}, {post_inc_int, %1} - dbf %a, {slabel, 1b} - -pat sti -with STACK - kills ALL - gen move_i {const, $1}, {pre_dec_int, sp} - jsr {absolute4, ".sts"} - -pat sts $1==WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".sts"} -#if WORD_SIZE==2 -pat sts $1==4 -with STACK - kills ALL - gen jsr {absolute4, ".sts4"} -#endif - -#if WORD_SIZE==2 -pat sdl -with store4-sconsts4 - kills all_indir, DLOCAL %bd==$1 - gen move %1, {DLOCAL, $1} -with exact STACK - kills all_indir, DLOCAL %bd==$1 - gen move_l {post_inc4,sp}, {DLOCAL, $1} -#else -pat sdl -with any4-sconsts any4-sconsts - kills all_indir, LOCAL %bd==$1 - gen move %1, {LOCAL, $1} - move %2, {LOCAL, $1+4} -#if TBL68881 -with exact FD_REG - kills all_indir, LOCAL %bd==$1 - gen fmove_d %1, {LOCAL, $1} -#endif -with exact STACK - kills all_indir, LOCAL %bd==$1 - gen move_l {post_inc4, sp}, {LOCAL,$1} - move_l {post_inc4, sp}, {LOCAL,$1+4} -#endif /* WORD_SIZE==2 */ - -pat sde -#if WORD_SIZE==2 -with any4-sconsts4 - kills posextern - gen move_l %1, {absolute4, $1} -with exact STACK - kills posextern - gen move_l {post_inc4, sp}, {absolute4, $1} -#else -with any4-sconsts any4-sconsts - kills posextern - gen move %1, {absolute4, $1} - move %2, {absolute4, $1+4} -#if TBL68881 -with exact FD_REG - kills posextern - gen fmove_d %1, {absolute4, $1} -#endif -with exact STACK - kills posextern - gen move_l {post_inc4, sp}, {absolute4,$1} - move_l {post_inc4, sp}, {absolute4,$1+4} -#endif - -pat sdf -#if WORD_SIZE==2 -with A_REG any4-sconsts4 - kills allexceptcon - gen move_l %2, {offsetted4, %1, $1} -with exact A_REG STACK - kills allexceptcon - gen move_l {post_inc4, sp}, {offsetted4, %1, $1} -#else -with A_REG any4-sconsts any4-sconsts - kills allexceptcon - gen move %2, {offsetted4, %1, $1} - move %3, {offsetted4, %1, $1+4} -with exact local_addr any4 any4 - kills allexceptcon - gen move %2, {LOCAL, %1.bd+$1} - move %3, {LOCAL, %1.bd+$1+4} -with regAcon any4-sconsts any4-sconsts - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd+$1} - move %3, {offsetted4, %1.reg, %1.bd+$1+4} -#endif - - - -/************************************************ - * Group 3: integer arithmetic. * - ************************************************/ - -#if WORD_SIZE==2 -pat adi $1==2 -with any2-bconst DD_REG - gen add_w %1, %2 yields %2 -with DD_REG any2-DD_REG-bconst - gen add_w %2, %1 yields %1 -with exact any2 STACK - uses reusing %1,DD_REG=%1 - gen add_w {post_inc2, sp}, %a - yields %a -#endif - -pat adi $1==4 -with any4-bconst4 DD_REG4 - gen add_l %1, %2 yields %2 -with DD_REG4 any4-DD_REG4-bconst4 - gen add_l %2, %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen add_l {post_inc4, sp}, %a - yields %a - -#if WORD_SIZE==2 -pat sbi $1==2 -with any2-bconst DD_REG - gen sub_w %1, %2 yields %2 -with DD_REG any2-DD_REG-bconst - gen sub_w %2, %1 - neg_w %1 yields %1 -with exact any2 STACK - uses reusing %1,DD_REG=%1 - gen sub_w {post_inc2, sp}, %a - neg_w %a yields %a -#endif - -pat sbi $1==4 -with any4-bconst4 DD_REG4 - gen sub_l %1, %2 yields %2 -with DD_REG4 any4-DD_REG4-bconst4 - gen sub_l %2, %1 - neg_l %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen sub_l {post_inc4, sp}, %a - neg_l %a yields %a -with any4-bconst4 AA_REG - gen sub_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat loc loc cii ldc mli $1==2 && $2==4 && highw($4)==0 && loww($4)>0 && $5==4 -with any2-pre_post - uses reusing %1, DD_REG4 - gen move %1, %a.1 - muls_w {const, loww($4)}, %a.1 - yields %a - -pat mli $1==2 -with any2-pre_post any2-pre_post - uses reusing %2,DD_REG = %2 - gen muls_w %1, %a yields %a -#endif - -pat mli $1==4 -#ifdef TBL68020 -with data4 DD_REG4 - gen muls_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".mli"} - yields dl1 -#endif - -#if WORD_SIZE==2 -pat dvi $1==2 -with data2-sconsts DD_REG - gen ext_l %2 - divs_w %1, %2 - yields %2 -#endif - -pat dvi $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen divs_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvi"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat rmi $1==2 -with data2-sconsts DD_REG - gen ext_l %2 - divs_w %1, %2 - swap %2 - killreg %2 - yields %2 -#endif - -pat rmi $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - uses DD_REG4 - gen divsl_l %1, {DREG_pair, %a, %2} - killreg %2 - /* !!!! contents of %2 have changed: make this known to cg */ - yields %a -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvi"} - yields dl2 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat ngi $1==2 -with DD_REG - gen neg_w %1 yields %1 -#endif - -pat ngi $1==4 -with DD_REG4 - gen neg_l %1 yields %1 - -#if WORD_SIZE==2 -pat sli $1==2 -with shconreg DD_REG - gen asl_w %1, %2 yields %2 -#endif - -pat sli $1==4 -with shconreg DD_REG4 - gen asl_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat sri $1==2 -with shconreg DD_REG - gen asr_w %1, %2 yields %2 -#endif - -pat sri $1==4 -with shconreg DD_REG4 - gen asr_l %1, %2 yields %2 - -/************************************************ - * Group 4: unsigned arithmetic. * - ************************************************/ - -pat adu leaving adi $1 - -pat sbu leaving sbi $1 - -#if WORD_SIZE==2 -pat mlu $1==2 -with any2-pre_post any2-pre_post - uses reusing %2,DD_REG = %2 - gen mulu_w %1, %a yields %a -#endif - -pat mlu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen mulu_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".mlu"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat dvu $1==2 -with data2-sconsts data2 - uses DD_REG4 = {zero_const4,0} - gen move %2,%a.1 - divu_w %1, %a.1 yields %a.1 -#endif - -pat dvu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen divu_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvu"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat rmu $1==2 -with data2-sconsts data2 - uses DD_REG4 = {zero_const4, 0} - gen move %2,%a.1 - divu_w %1, %a.1 - swap %a.1 - killreg %a - yields %a.1 -#endif - -pat rmu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - uses DD_REG4 - gen divul_l %1, {DREG_pair, %a, %2} - killreg %2 - /* !!!! contents of %2 have changed: make this known to cg */ - yields %a -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvu"} - yields dl2 -#endif /* TBL68020 */ - -pat slu leaving sli $1 - -#if WORD_SIZE==2 -pat sru $1==2 -with shconreg DD_REG - gen lsr_w %1, %2 yields %2 -#endif - -pat sru $1==4 -with shconreg DD_REG4 - gen lsr_l %1, %2 yields %2 - -/************************************************ - * Group 5: floating point arithmetic * - ************************************************/ - -/* Floating point stuff - * Arithmetic instructions - */ - -#if TBL68881 -pat adf stl $1==4 - with FS_REG STACK - gen fadd_s {post_inc4,sp},%1 yields %1 leaving stl $2 -pat adf sdl $1==8 - with FD_REG STACK - gen fadd_d {post_inc4,sp},%1 yields %1 leaving sdl $2 -pat sbf stl $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 yields %2 leaving stl $2 -pat sbf sdl $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 yields %2 leaving sdl $2 -pat mlf stl $1==4 - with FS_REG STACK - gen fmul_s {post_inc4,sp},%1 yields %1 leaving stl $2 -pat mlf sdl $1==8 - with FD_REG STACK - gen fmul_d {post_inc4,sp},%1 yields %1 leaving sdl $2 -pat dvf stl $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 yields %2 leaving stl $2 -pat dvf sdl $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 yields %2 leaving sdl $2 -pat ngf stl $1==4 - with FS_REG STACK - gen fneg %1 yields %1 leaving stl $2 -pat ngf sdl $1==8 - with FD_REG STACK - gen fneg %1 yields %1 leaving sdl $2 - -pat adf ste $1==4 - with FS_REG STACK - gen fadd_s {post_inc4,sp},%1 yields %1 leaving ste $2 -pat adf sde $1==8 - with FD_REG STACK - gen fadd_d {post_inc4,sp},%1 yields %1 leaving sde $2 -pat sbf ste $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 yields %2 leaving ste $2 -pat sbf sde $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 yields %2 leaving sde $2 -pat mlf ste $1==4 - with FS_REG STACK - gen fmul_s {post_inc4,sp},%1 yields %1 leaving ste $2 -pat mlf sde $1==8 - with FD_REG STACK - gen fmul_d {post_inc4,sp},%1 yields %1 leaving sde $2 -pat dvf ste $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 yields %2 leaving ste $2 -pat dvf sde $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 yields %2 leaving sde $2 -pat ngf ste $1==4 - with FS_REG STACK - gen fneg %1 yields %1 leaving ste $2 -pat ngf sde $1==8 - with FD_REG STACK - gen fneg %1 yields %1 leaving sde $2 - -pat adf $1==4 - with FS_REG STACK - gen fadd_s {indirect4,sp},%1 - fmove_s %1,{indirect4,sp} -pat adf $1==8 - with FD_REG STACK - gen fadd_d {indirect4,sp},%1 - fmove_d %1,{indirect4,sp} -pat sbf $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 - fmove_s %2,{pre_dec4,sp} -pat sbf $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 - fmove_d %2,{pre_dec4,sp} -pat mlf $1==4 - with FS_REG STACK - gen fmul_s {indirect4,sp},%1 - fmove_s %1,{indirect4,sp} -pat mlf $1==8 - with FD_REG STACK - gen fmul_d {indirect4,sp},%1 - fmove_d %1,{indirect4,sp} -pat dvf $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 - fmove_s %2,{pre_dec4,sp} -pat dvf $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 - fmove_d %2,{pre_dec4,sp} -pat ngf $1==4 - with FS_REG STACK - gen fneg %1 - fmove_s %1,{pre_dec4,sp} -pat ngf $1==8 - with FD_REG STACK - gen fneg %1 - fmove_d %1,{pre_dec4,sp} -pat fif $1==4 - with FS_REG FS_REG STACK - gen fmul %1,%2 - fintrz %2,%1 - fsub %1,%2 - fmove_s %2,{pre_dec4,sp} - fmove_s %1,{pre_dec4,sp} -pat fif $1==8 - with FD_REG FD_REG STACK - gen fmul %1,%2 - fintrz %2,%1 - fsub %1,%2 - fmove_d %2,{pre_dec4,sp} - fmove_d %1,{pre_dec4,sp} -#else -pat adf $1==4 leaving cal ".adf4" asp 4 -pat adf $1==8 leaving cal ".adf8" asp 8 -pat sbf $1==4 leaving cal ".sbf4" asp 4 -pat sbf $1==8 leaving cal ".sbf8" asp 8 -pat mlf $1==4 leaving cal ".mlf4" asp 4 -pat mlf $1==8 leaving cal ".mlf8" asp 8 -pat dvf $1==4 leaving cal ".dvf4" asp 4 -pat dvf $1==8 leaving cal ".dvf8" asp 8 -pat ngf $1==4 leaving cal ".ngf4" -pat ngf $1==8 leaving cal ".ngf8" -pat fif $1==4 leaving lor 1 cal ".fif4" asp 4 -pat fif $1==8 leaving lor 1 cal ".fif8" asp 4 -#endif -#if WORD_SIZE==2 -pat fef $1==4 leaving lor 1 adp 0-2 cal ".fef4" asp 2 -pat fef $1==8 leaving lor 1 adp 0-2 cal ".fef8" asp 2 -#else -pat fef $1==4 leaving lor 1 adp 0-4 cal ".fef4" -pat fef $1==8 leaving lor 1 adp 0-4 cal ".fef8" -#endif - -/************************************************ - * Group 6: pointer arithmetic * - ************************************************/ - -pat adp $1==0 /* skip; array instructions might 'leave' this */ - -pat adp -with A_REG yields {t_regAcon, %1, $1} -with exact local_addr yields {local_addr, %1.bd+$1} -with exact ext_addr yields {ext_addr, %1.bd+$1} -with exact regAcon + t_regAcon - yields {t_regAcon, %1.reg, %1.bd+$1} -with exact regAregXcon + t_regAregXcon - yields {t_regAregXcon,%1.reg, %1.xreg, %1.sc, %1.bd+$1} -#if TBL68020 && FANCY_MODES -with exact indirect4 yields {off_con, %1.reg, 0, $1} -with exact LOCAL yields {off_con, lb, %1.bd, $1} -with exact offsetted4 yields {off_con, %1.reg, %1.bd, $1} -with exact off_con yields {off_con, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 yields {indoff_con, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con yields {indoff_con, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon yields {off_regXcon, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 yields {abs_con, %1.bd, $1} -with exact abs_con yields {abs_con, %1.bd, %1.od+$1} -with exact abs_regXcon yields {abs_regXcon, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 yields {absind_con, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con yields {absind_con, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX yields {ext_regX, %1.sc, %1.xreg, %1.bd+$1} -#endif - -pat ads cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving cmu 4 -#endif - -#if WORD_SIZE!=2 -pat ads bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving bne $2 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving bne $2 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving bne $2 -#endif - -pat ads beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving beq $2 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving beq $2 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving beq $2 -#endif - -pat ads LEP bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving loe $2 bne $3 -#endif - -pat ads LEP beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving loe $2 beq $3 -#endif - -pat ads LEP cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving LEP $2 cmu 4 -#endif - -pat ads lae bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 bne $3 -#endif - -pat ads lae beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 beq $3 -#endif -#endif /* WORD_SIZE==2 */ - -pat ads lae cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 cmu 4 -#endif - -#if WORD_SIZE!=2 -pat ads lal bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 bne $3 -#endif - -pat ads lal beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 beq $3 -#endif - -pat ads lal cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 cmu 4 -#endif - -pat ads LLP bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 bne $3 -#endif - -pat ads LLP beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 beq $3 -#endif -#endif /* WORD_SIZE==2 */ - -pat ads LLP cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 cmu 4 -#endif - -#if WORD_SIZE==2 -pat ads $1==2 - leaving loc 2 loc 4 cii ads 4 -#endif - -pat ads $1==4 -with D_REG4 A_REG yields {regAregXcon, %2, %1, 1, 0} -with D_REG4 regAcon + t_regAcon - yields {t_regAregXcon, %2.reg, %1, 1, %2.bd} -with D_REG4 local_addr yields {t_regAregXcon, lb, %1, 1, %2.bd} -with any4 AA_REG - gen add_l %1, %2 yields %2 - -#ifdef TBL68020 - -with D_REG4 yields {regX, 1, %1} - leaving ads 4 -with regX A_REG yields {regAregXcon, %2, %1.xreg, %1.sc, 0} -with exact regX regAcon yields {regAregXcon, %2.reg, %1.xreg, %1.sc, %2.bd} -with exact regX local_addr - yields {regAregXcon, lb, %1.xreg, %1.sc, %2.bd} -#ifdef FANCY_MODES -with exact regX indirect4 - yields {off_regXcon, %2.reg, %1.xreg,%1.sc,0,0} -with exact regX offsetted4 - yields {off_regXcon, %2.reg, %1.xreg, %1.sc, %2.bd, 0} -with exact regX DLOCAL yields {off_regXcon, lb, %1.xreg, %1.sc, %2.bd, 0} -with exact regX off_con yields {off_regXcon, %2.reg, %1.xreg,%1.sc,%2.bd,%2.od} -with exact regX ext_addr - yields {ext_regX, %1.sc, %1.xreg, %2.bd} -with exact regX absolute4 - yields {abs_regXcon, %1.sc, %1.xreg, %2.bd, 0} -with exact regX abs_con yields {abs_regXcon, %1.sc, %1.xreg, %2.bd, %2.od} -with exact indirect4 ext_addr - yields {off_con, %1.reg, 0, %2.bd} -with exact offsetted4 ext_addr - yields {off_con, %1.reg, %1.bd, %2.bd} -with exact LOCAL ext_addr - yields {off_con, lb, %1.bd, %2.bd} -with exact index_off4 ext_addr - yields {indoff_con, %1.reg, %1.xreg, %1.sc,%1.bd,%2.bd} -with exact absolute4 ext_addr - yields {abs_con, %1.bd, %2.bd} -with exact abs_index4 ext_addr - yields {absind_con, %1.sc, %1.xreg, %1.bd, %2.bd} -with exact indirect4 ext_regX - yields {off_regXcon, %1.reg, %2.xreg, %2.sc, 0, %2.bd} -with exact offsetted4 ext_regX - yields {off_regXcon, %1.reg, %2.xreg,%2.sc,%1.bd,%2.bd} -with exact LOCAL ext_regX - yields {off_regXcon, lb, %2.xreg, %2.sc, %1.bd, %2.bd} -with exact absolute4 ext_regX - yields {abs_regXcon, %2.sc, %2.xreg, %1.bd, %2.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - - /* I WOULD ALSO LIKE THIS: - * pat ads - * with const leaving adp %1.num - * BUT THAT DOESN'T WORK. - */ - -#if WORD_SIZE==2 -pat sbs $1==2 - leaving sbs 4 loc 4 loc 2 cii -#endif - -pat sbs $1==4 leaving sbi 4 - -/* regX type OK ??? */ -#ifdef TBL68020 -pat loc slu $2==4 leaving loc $1 sli 4 - -pat loc sli ads $1==1 && $2==4 && $3==4 -with D_REG4 yields {regX, 2, %1} - leaving ads 4 - -pat loc sli ads $1==2 && $2==4 && $3==4 -with D_REG4 yields {regX, 4, %1} - leaving ads 4 - -pat loc sli ads $1==3 && $2==4 && $3==4 -with D_REG4 yields {regX, 8, %1} - leaving ads 4 -#else - -pat loc sli $1==1 && $2==WORD_SIZE -with DD_REG - gen add_i %1, %1 yields %1 - -#if WORD_SIZE==2 -pat loc sli $1==1 && $2==4 -with DD_REG4 - gen add_l %1, %1 yields %1 -#endif - -#endif /* TBL68020 */ - - -/************************************************ - * Group 7: increment / decrement / zero * - ************************************************/ - -pat inc leaving loc 1 adi WORD_SIZE - -pat inl inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen add_i {const, 1}, {LOCAL, $1} - -pat inl - kills all_indir, LOCAL %bd==$1 - gen add_i {const, 1}, {LOCAL, $1} - -pat lol inl $1==$2 - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen add_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat ine - kills posextern - gen add_i {const, 1}, {absolute_int, $1} - -pat dec leaving loc 1 sbi WORD_SIZE - -pat del inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sub_i {const, 1}, {LOCAL, $1} - -pat del - kills all_indir, LOCAL %bd==$1 - gen sub_i {const, 1}, {LOCAL, $1} - -pat lol del $1==$2 - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen sub_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat dee - kills posextern - gen sub_i {const, 1}, {absolute_int, $1} - -pat zrl inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - -pat zrl inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move {const4,0}, {areg, regvar($1, reg_pointer)} - -pat zrl - kills all_indir, LOCAL %bd==$1 - gen clr_i {LOCAL, $1} - -pat zrl lol $1==$2 && inreg($1) < 0 - kills all_indir, LOCAL %bd==$1 - gen clr_i {LOCAL, $1} yields {zero_const, 0} - -pat zre - kills posextern - gen clr_i {absolute_int, $1} - -pat zre loe $1==$2 - kills posextern - gen clr_i {absolute_int, $1} yields {zero_const, 0} - -pat zer $1==4 yields {zero_const4, 0} -#if WORD_SIZE==2 -pat zer $1==6 yields {zero_const, 0} {zero_const, 0} {zero_const, 0} -#else -pat zer $1==8 yields {zero_const, 0} {zero_const, 0} -pat zer $1==12 yields {zero_const, 0} {zero_const, 0} {zero_const, 0} -#endif - -pat zer $1/WORD_SIZE <= 65536 -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - clr_i {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat zer -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE} - gen 1: - clr_i {pre_dec_int, sp} - sub_l {const4,1}, %a - bne {slabel, 1b} - -/************************************************ - * Group 8: convert instructions * - ************************************************/ - - - -pat cii -with STACK - kills ALL - gen jsr {absolute4, ".cii"} - -#if WORD_SIZE==2 -/* No sign-extension, though this is probably not what you may want. - * This will teach compiler writers not to convert between unsigneds and - * integers of a different size. - */ -pat loc loc ciu $1==2 && $2==4 -with zero_const - yields {zero_const4, 0} -with any -uses DD_REG4 = {zero_const4, 0} - gen move %1,%a.1 - yields %a - -pat loc loc ciu $1==4 && $2==2 -with zero_const4 - yields {zero_const, 0} -with any4 -uses reusing %1, DD_REG4 = %1 - yields %a.1 - -pat loc loc cui $1==2 && $2==4 -with any2 -uses DD_REG4={zero_const4,0} - gen move %1,%a.1 yields %a - -pat loc loc cui $1==4 && $2==2 -with DD_REG4 - yields %1.1 - -pat loc loc cuu $1==2 && $2==4 -with any2 -uses reusing %1,DD_REG4 - gen move %1,%a.1 - and_l {const4,65535}, %a yields %a -with any2 -uses DD_REG4={zero_const4,0} - gen move %1,%a.1 yields %a - -pat loc loc cuu $1==4 && $2==2 -with DD_REG4 - yields %1.1 -#endif - -pat cuu -with STACK - kills ALL - gen jsr {absolute4, ".cuu"} - -pat ciu leaving cuu - -pat cui leaving cuu - -#if TBL68881 -pat loc loc cif $1==4 && $2==4 -with data4 STACK - uses FS_REG - gen fmove_l %1,%a - fmove_s %a,{pre_dec4,sp} -pat loc loc cif $1==4 && $2==8 -with data4 STACK - uses FD_REG - gen fmove_l %1,%a - fmove_d %a,{pre_dec4,sp} -pat loc loc cuf $1==4 && $2==4 -with D_REG STACK - uses FS_REG - gen fmove_l %1,%a - tst_l %1 - bge {slabel, 1f} - fsub_l {const,0-2147483648},%a - fsub_l {const,0-2147483648},%a - 1: - fmove_s %a,{pre_dec4,sp} -pat loc loc cuf $1==4 && $2==8 -with D_REG STACK - uses FD_REG - gen fmove_l %1,%a - tst_l %1 - bge {slabel, 1f} - fsub_l {const,0-2147483648},%a - fsub_l {const,0-2147483648},%a - 1: - fmove_d %a,{pre_dec4,sp} -pat loc loc cfi $1==4 && $2==4 -with FS_REG - uses D_REG - gen fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfi $1==8 && $2==4 -with FD_REG - uses D_REG - gen fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfu $1==4 && $2==4 -with FS_REG - uses D_REG - gen fabs %1 - fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfu $1==8 && $2==4 -with FD_REG - uses D_REG - gen fabs %1 - fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cff $1==4 && $2==8 -with FS_REG STACK - gen fmove_d %1,{pre_dec4,sp} -pat loc loc cff $1==8 && $2==4 -with FD_REG STACK - gen fmove_s %1,{pre_dec4,sp} -#else -/* - * Floating point stuff - * Conversion - */ -#if WORD_SIZE==2 -/* The patterns need some room on the stack first */ -pat loc loc cif $1==2 && $2==4 leaving loc $1 cal ".cif4" - -pat loc loc cif $1==2 && $2==8 -with any2 -kills ALL -gen clr_l {pre_dec4, sp} - move_w %1,{pre_dec2, sp} leaving loc $1 cal ".cif8" - -pat loc loc cif $1==4 && $2==4 leaving loc $1 cal ".cif4" asp 2 - -pat loc loc cif $1==4 && $2==8 -with any4 -kills ALL -gen clr_w {pre_dec2, sp} - move_l %1,{pre_dec4, sp} leaving loc $1 cal ".cif8" - -pat loc loc cuf $1==2 && $2==4 leaving loc $1 cal ".cuf4" - -pat loc loc cuf $1==2 && $2==8 -with any2 -kills ALL -gen clr_l {pre_dec4, sp} - move_w %1,{pre_dec2, sp} leaving loc $1 cal ".cuf8" - -pat loc loc cuf $1==4 && $2==4 leaving loc $1 cal ".cuf4" asp 2 - -pat loc loc cuf $1==4 && $2==8 -with any4 -kills ALL -gen clr_w {pre_dec2, sp} - move_l %1,{pre_dec4, sp} leaving loc $1 cal ".cuf8" - -pat loc loc cfi $1==4 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfi" asp 8-$2 - -pat loc loc cfi $1==8 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfi" asp 12-$2 - -pat loc loc cfu $1==4 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfu" asp 8-$2 -pat loc loc cfu $1==8 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfu" asp 12-$2 -#else -pat loc loc cif $1==4 && $2==4 leaving loc 4 cal ".cif4" asp 4 -pat loc loc cif $1==4 && $2==8 leaving loc 4 cal ".cif8" -pat loc loc cuf $1==4 && $2==4 leaving loc 4 cal ".cuf4" asp 4 -pat loc loc cuf $1==4 && $2==8 leaving loc 4 cal ".cuf8" -pat loc loc cfi leaving loc $1 loc $2 cal ".cfi" asp $1+4 -pat loc loc cfu leaving loc $1 loc $2 cal ".cfu" asp $1+4 -#endif -pat loc loc cff $1==8 && $2==4 leaving cal ".cff4" asp 4 -pat loc loc cff $1==4 && $2==8 - leaving zer 4 exg 4 cal ".cff8" -#endif /* TBL68881 */ - -/************************************************ - * Group 9: logical instructions * - ************************************************/ - - -#if WORD_SIZE==2 -proc log2w -with datalt4+consts4-sconsts4 DD_REG4 - gen xxx* %1, %2 yields %2 -with DD_REG4 datalt4+consts4-sconsts4 - gen xxx* %2, %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen xxx* {post_inc4, sp}, %a yields %a -#endif - -proc logw -with datalt_int+consts-sconsts DD_REG - gen xxx* %1, %2 yields %2 -with DD_REG datalt_int+consts-sconsts - gen xxx* %2, %1 yields %1 -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen xxx* {post_inc_int, sp}, %a yields %a - -proc logdef example and -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1}, - AA_REG, - DD_REG - gen - lea {regAcon, sp, $1}, %b - 1: - move_i {post_inc_int, sp}, %c - xxx* %c, {post_inc_int, %b} - dbf %a, {slabel, 1b} - -#if WORD_SIZE==4 -proc logndef -with DD_REG4 STACK - uses AA_REG, - DD_REG - gen - lea {regAregXcon, sp, %1, 1, 0},%a - asr_l {small_const, 2}, %1 - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - sub_l {const4,1}, %1 - bne {slabel, 1b} -#else -proc logndef -with any_int STACK - uses AA_REG, - DD_REG, - DD_REG4={const,0} - gen - move %1, %c.1 - lea {regAregXcon, sp, %c, 1, 0},%a - asr_l {small_const, 1}, %c - sub_l {const4,1}, %c - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - dbf %c, {slabel, 1b} -#endif - -proc logbdef example and -with STACK - uses AA_REG, - DD_REG, - DD_REG4 - gen - move_l {const4,$1/WORD_SIZE}, %c - lea {regAregXcon, sp, %c, 1, 0},%a - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - sub_l {const4,1}, %c - bne {slabel, 1b} - -pat and $1==WORD_SIZE call logw(AND_I) -#if WORD_SIZE==2 -pat and $1==2*WORD_SIZE call log2w("and.l") -#endif -pat and $1>4 && $1/WORD_SIZE<=65536 call logdef(AND_I) -pat and defined($1) call logbdef(AND_I) -pat and !defined($1) call logndef(AND_I) - -pat ior $1==WORD_SIZE call logw(OR_I) -#if WORD_SIZE==2 -pat ior $1==2*WORD_SIZE call log2w("or.l") -#endif -pat ior $1>2 && $1/WORD_SIZE<=65536 call logdef(OR_I) -pat ior defined($1) call logbdef(OR_I) -pat ior !defined($1) call logndef(OR_I) - -#if WORD_SIZE==2 -pat xor $1==2 -with DD_REG conreg2-bconst - gen eor_w %2, %1 yields %1 -#endif - -pat xor $1==4 -with DD_REG4 conreg4-bconst4 - gen eor_l %2, %1 yields %1 - -pat xor $1>4 && $1/WORD_SIZE<=65536 call logdef(EOR_I) -pat xor defined($1) call logbdef(EOR_I) -pat xor !defined($1) call logndef(EOR_I) - -#if WORD_SIZE==2 -pat com $1==2 -with DD_REG - gen not_w %1 yields %1 -#endif - -pat com $1==4 -with DD_REG4 - gen not_l %1 yields %1 - -pat com $1==8 -with DD_REG4 DD_REG4 - gen not_l %1 - not_l %2 yields %2 %1 - -pat com $1>8 && $1/WORD_SIZE<=65536 -with STACK - uses AA_REG, - DD_REG4 = {const, $1/WORD_SIZE -1} - gen move_l sp, %a - 1: - not_i {post_inc_int, %a} - dbf %b, {slabel, 1b} - -pat com defined($1) -with STACK - uses AA_REG, - DD_REG4 = {const, $1/WORD_SIZE} - gen move_l sp, %a - 1: - not_i {post_inc_int, %a} - sub_l {const4, 1}, %b - bne {slabel, 1b} - -#if WORD_SIZE==4 -pat com !defined($1) -with DD_REG STACK - uses AA_REG - gen move_l sp, %a - asr_l {small_const, 2}, %1 - 1: - not_i {post_inc_int, %a} - sub_l {const4, 1}, %1 - bne {slabel, 1b} -#else -pat com !defined($1) -with any_int STACK - uses AA_REG, - DD_REG4={const,0} - gen move %1, %b.1 - move_l sp, %a - asr_l {small_const, 1}, %b - sub_l {const4, 1}, %b - 1: - not_i {post_inc_int, %a} - dbf %b, {slabel, 1b} -#endif - -#if WORD_SIZE==2 -pat rol $1==2 -with shconreg DD_REG - gen rol_w %1, %2 yields %2 -#endif - -pat rol $1==4 -with shconreg DD_REG4 - gen rol_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat ror $1==2 -with shconreg DD_REG - gen ror_w %1, %2 yields %2 -#endif - -pat ror $1==4 -with shconreg DD_REG4 - gen ror_l %1, %2 yields %2 - - - - -/************************************************ - * Group 10: sets * - ************************************************/ - -#if WORD_SIZE==2 -pat inn $1==4 -with conreg2 DD_REG4 - gen btst %1, %2.1 - sne {dreg1, %2.1} - and_l {const4, 1}, %2 - yields %2.1 -#endif - -pat inn $1==WORD_SIZE -with conreg2 DD_REG - gen btst %1, %2 - sne {dreg1, %2} - and_i {const, 1}, %2 - yields %2 - -/* The interface for the .inn differ for m68k2 and m68k4. */ -/* ??? Work out a cleaner interface, that is similar for all tables */ -#if WORD_SIZE==2 -pat inn defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 - -pat inn !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 -#else -pat inn defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - move {const, $1}, d1 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 - -pat inn !defined($1) -with any_int any_int STACK - kills ALL - gen move %2, d0 - move %1, d1 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 -#endif /* WORD_SIZE==2 */ - -pat loc inn $2==WORD_SIZE && small($1) -with DD_REG - gen asr_i {small_const, $1}, %1 - and_i {const, 1}, %1 - yields %1 - -#if WORD_SIZE==2 -pat set $1==2 -with conreg2 - uses DD_REG = {zero_const, 0} - gen bset %1, %a yields %a -#else - -pat set $1==4 -with conreg2 - uses DD_REG4 = {zero_const4, 0} - gen bset %1, %a yields %a -#endif - -#if WORD_SIZE==2 -pat set $1>2 -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".set"} - -pat set !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".set"} -#else -pat set $1>4 -with any_int STACK - kills ALL - gen move %1, d0 - move {const, $1}, d1 - jsr {absolute4, ".set"} - -pat set !defined($1) -with any_int any_int STACK - kills ALL - gen move %2, d0 - move %1, d1 - jsr {absolute4, ".set"} -#endif /* WORD_SIZE==2 */ - - - - -/************************************************ - * Group 11: arrays * - ************************************************/ - -/* ??? interface */ -#if WORD_SIZE==2 -pat lar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".lar"} - -pat sar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".sar"} - -pat aar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".aar"} -#else -pat lar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".lar"} - -pat lar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".lar"} - -pat sar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".sar"} - -pat sar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".sar"} - -pat aar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".aar"} - yields a0 - -pat aar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".aar"} - yields a0 - -#if ARR_OPT -pat lae lar $2==4 && nicesize(rom($1,3)) - leaving lae $1 aar 4 loi rom($1, 3) -pat lae sar $2==4 && nicesize(rom($1,3)) - leaving lae $1 aar 4 sti rom($1, 3) - -pat lae aar $2==4 && rom($1,3)==1 - leaving ads 4 adp 0-rom($1,1) - -#ifdef TBL68020 -pat lae aar $2==4 && nicesize(rom($1,3)) -with D_REG yields {regX, rom($1,3), %1} - leaving ads 4 adp rom($1,3)*(0-rom($1,1)) -#else /* TBL68020 */ -pat lae aar $2==4 && rom($1,3)==2 -with DD_REG - gen asl_l {small_const, 1}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<1 - -pat lae aar $2==4 && rom($1,3)==4 -with DD_REG - gen asl_l {small_const, 2}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<2 - -pat lae aar $2==4 && rom($1,3)==8 -with DD_REG - gen asl_l {small_const, 3}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<3 -#endif /* TBL68020 */ -#endif /* ARR_OPT */ -#endif /* WORD_SIZE!=2 */ - - /* I WOULD ALSO LIKE THESE: - * pat lae aar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * pat lae lar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * loi rom($1,3) - * pat lae sar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * sti rom($1,3) - * BUT THEY DON'T WORK. - */ - - - -/************************************************ - * Group 12: compare instructions * - ************************************************/ - - -#if WORD_SIZE==2 -pat cmi defined($1) && $1==2 -with any2 DD_REG - uses DD_REG = {zero_const, 0} - gen cmp_w %1,%2 - beq {slabel,2f} - bgt {slabel,1f} - add_w {small_const, 1},%a - bra {slabel,2f} - 1: - sub_w {small_const, 1},%a - 2: - yields %a - -pat cmi defined($1) && $1==4 -with STACK - gen jsr {absolute4, ".cmi"} yields d1 -#else -/* pat cmi $1==4 leaving sbi 4 - WRONG !! -*/ - -pat cmi defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cmi"} - yields d0 - -pat cmi !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cmi"} - yields d0 -#endif - -/* pat cmu $1==4 leaving sbi 4 - WRONG !! -*/ - -#if WORD_SIZE==2 -pat cmu defined($1) -with STACK - gen move {const, $1},d0 - jsr {absolute4, ".cmu"} - -pat cmu !defined($1) -with any STACK - gen move %1,d0 - jsr {absolute4, ".cmu"} -#else -pat cmu defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cmu"} - yields d0 - -pat cmu !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cmu"} - yields d0 -#endif /* WORD_SIZE==2 */ - -#if WORD_SIZE==2 -pat cms $1==2 leaving cmi 2 -pat cms $1==4 leaving cmi 4 -#else -pat cms $1==4 leaving cmi 4 -#endif - -pat cms defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cms"} - yields d0 - -pat cms !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cms"} - yields d0 - -pat cmp leaving cmu 4 - -#ifndef XXXXX -proc txx -with test_set_int - uses reusing %1,DD_REG - gen test %1 - bxx[1] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - bxx[2] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a - -/* for some branches, we need to get rid of the overflow bit first. - The easiest way to do this is to just test .... -*/ -proc txx_ouch -with test_set_int - uses reusing %1,DD_REG - gen killcc. - test %1 - bxx[1] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - bxx[2] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a - -pat tlt call txx("bmi", "bcs") -pat tle call txx_ouch("ble", "bls") -pat teq call txx("beq", "beq") -pat tne call txx("bne", "bne") -pat tge call txx("bpl", "bcc") -pat tgt call txx_ouch("bgt", "bhi") -#else -proc txx -with test_set_int - uses reusing %1,DD_REG - gen test %1 - sxx[1] %a - neg_b %a - yields {extend1, %a} - -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} - -pat tlt call txx("smi", "scs") -pat tle call txx("sle", "sls") -pat teq call txx("seq", "seq") -pat tne call txx("sne", "sne") -pat tge call txx("spl", "scc") -pat tgt call txx("sgt", "shi") -#endif - -/* - * Floating point - * Comparision - */ -#if TBL68881 -pat cmf $1==4 -with FS_REG FS_REG - uses D_REG={const,0} - gen fcmp %1,%2 - fbeq {slabel,2f} - fblt {slabel,1f} - add_l {const,1},%a - bra {slabel,2f} - 1: - sub_l {const,1},%a - 2: yields %a -pat cmf $1==8 -with FD_REG FD_REG - uses D_REG={const,0} - gen fcmp %1,%2 - fbeq {slabel,2f} - fblt {slabel,1f} - add_l {const,1},%a - bra {slabel,2f} - 1: - sub_l {const,1},%a - 2: yields %a -#else -pat cmf $1==4 leaving cal ".cmf4" asp 8 lfr WORD_SIZE -pat cmf $1==8 leaving cal ".cmf8" asp 16 lfr WORD_SIZE -#endif -/* - * Floating Point - * Zero Constants - */ -pat zrf leaving zer $1 - -/************************************************ - * Group 13: branch instructions * - ************************************************/ - -#if WORD_SIZE==2 -pat lab topeltsize($1)==4 && !fallthrough($1) -kills ALL -gen labeldef $1 yields dl0 - -pat lab topeltsize($1)==4 && fallthrough($1) -with any4 STACK -kills ALL -gen move %1, dl0 - killreg dl0 - labeldef $1 yields dl0 -#endif - -pat lab topeltsize($1)==WORD_SIZE && !fallthrough($1) -kills ALL -gen labeldef $1 yields d0 - -pat lab topeltsize($1)==WORD_SIZE && fallthrough($1) -with any_int STACK -kills ALL -gen move %1,d0 - killreg d0 - labeldef $1 yields d0 - -pat lab -with STACK -kills ALL -gen labeldef $1 - -#if WORD_SIZE==2 -pat bra topeltsize($1)==4 -with any4 STACK -gen move %1,dl0 - bra {llabel, $1} -#endif - -pat bra topeltsize($1)==WORD_SIZE -with any_int STACK -gen move %1,d0 - bra {llabel, $1} - -pat bra -with STACK - gen bra {llabel, $1} - -proc brxx example beq -with exact extend1 extend1 - kills ALL - gen cmp_b %1,%2 - bxx[1] {llabel, $1} -#if WORD_SIZE!=2 -with exact extend2 extend2 - kills ALL - gen cmp_w %1,%2 - bxx[1] {llabel, $1} -#endif -with exact sconsts any_int - kills ALL - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {llabel, $1} -with exact any_int sconsts - kills ALL - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {llabel, $1} -with any_int-sconsts genreg STACK - gen cmp_i %1, %2 - bxx[1] {llabel, $1} -with genreg any_int-sconsts STACK - gen cmp_i %2, %1 - bxx[2] {llabel, $1} -with exact immediate_int-sconsts imm_cmp_int - kills ALL - gen cmp_i %1, %2 - bxx[1] {llabel, $1} -with exact imm_cmp_int immediate_int-sconsts - kills ALL - gen cmp_i %2, %1 - bxx[2] {llabel, $1} -with exact immediate_int-sconsts STACK - gen cmp_i %1, {post_inc_int, sp} - bxx[1] {llabel, $1} -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - bxx[2] {llabel, $1} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - bxx[2] {llabel, $1} -#if WORD_SIZE==4 -with exact post_inc4 post_inc4 - gen cmp_l %1,%2 - bxx[1] {llabel, $1} -#endif -with exact post_inc2 post_inc2 - gen cmp_w %1,%2 - bxx[1] {llabel, $1} -with exact post_inc1 post_inc1 - gen cmp_b %1,%2 - bxx[1] {llabel, $1} - -pat blt call brxx("blt","bgt") -pat ble call brxx("ble","bge") -pat beq call brxx("beq","beq") -pat bne call brxx("bne","bne") -pat bge call brxx("bge","ble") -pat bgt call brxx("bgt","blt") - -proc zxx example zeq -with test_set_int STACK - gen test %1 - bxx[1] {llabel, $1} -#if WORD_SIZE==2 -with test_set1 STACK -#else -with test_set1 + test_set2 STACK -#endif - gen test %1 - bxx[2] {llabel, $1} -with exact STACK - gen tst_i {post_inc_int, sp} - bxx[1] {llabel, $1} - -/* for some branches, we need to get rid of the overflow bit first. - The easiest way to do this is to just test .... -*/ -proc zxx_ouch example zeq -with test_set_int STACK - gen killcc. - test %1 - bxx[1] {llabel, $1} -#if WORD_SIZE==2 -with test_set1 STACK -#else -with test_set1 + test_set2 STACK -#endif - gen test %1 - bxx[2] {llabel, $1} -with exact STACK - gen tst_i {post_inc_int, sp} - bxx[1] {llabel, $1} - -pat zlt call zxx("bmi", "bcs") -pat zle call zxx_ouch("ble", "bls") -pat zeq call zxx("beq", "beq") -pat zne call zxx("bne", "bne") -pat zge call zxx("bpl", "bcc") -pat zgt call zxx_ouch("bgt", "bhi") - -/************************************************ - * Group 14: procedure calls instructions * - ************************************************/ - - -pat cai -with exact ext_addr - kills ALL - gen jsr {absolute4, %1.bd} -with A_REG STACK - kills ALL - gen jsr {indirect4, %1} -with STACK - kills ALL - uses AA_REG = {post_inc4, sp} - gen jsr {indirect4, %a} -with address STACK - kills ALL - gen jsr %1 - -pat cal -with STACK - kills ALL - gen jsr {absolute4, $1} - -#if WORD_SIZE==2 -pat lfr $1==2 yields d0 -pat lfr $1==4 yields dl0 -pat lfr $1==8 yields dl1 dl0 -#else -pat lfr $1==4 yields d0 -pat lfr $1==8 yields d1 d0 -#endif - -pat ret $1==0 - gen return - -pat asp ret $2==0 - gen return - -#if WORD_SIZE==2 -pat ret $1==2 -with any2 - gen move %1, d0 - return -with exact STACK - gen move_w {post_inc2, sp}, d0 - return -#endif - -pat ret $1==4 -with any4 - gen move %1, dl0 - return -with exact STACK - gen move_l {post_inc4, sp}, dl0 - return - -pat ret $1==8 -with any4 any4 - gen move %1, dl0 - move %2, dl1 - return -with exact any4 STACK - gen move %1, dl0 - move_l {post_inc4, sp}, dl1 - return -with exact STACK - gen move_l {post_inc4, sp}, dl0 - move_l {post_inc4, sp}, dl1 - return - - -/************************************************ - * Group 15: miscellaneous instructions * - ************************************************/ - -#if WORD_SIZE==2 -pat asp $1==2 -with any2-pre_post -with STACK - gen add_l {const4, $1}, sp -#endif - -pat asp $1==4 -#if WORD_SIZE==2 -with any-pre_post any-pre_post -#endif -with any4-pre_post -with STACK - gen add_l {const4, $1}, sp - -#if WORD_SIZE==2 -pat asp $1==6 -with any4-pre_post any-pre_post -with any-pre_post any4-pre_post -with any-pre_post any-pre_post any-pre_post -with STACK - gen add_l {const4, $1}, sp -#endif - -pat asp $1==8 -with any4-pre_post any4-pre_post -with STACK - gen add_l {const4, $1}, sp - -pat asp -with STACK - gen lea {regAcon, sp, $1}, sp - -/* ??? DD_REG$ ??? */ -#if WORD_SIZE==2 -pat ass $1==2 -with any2 STACK -uses reusing %1,DD_REG4 - gen move %1,%a.1 - ext_l %a.1 - add_l %a, sp -#endif - -pat ass $1==4 -with any4 STACK - gen add_l %1, sp - -#if WORD_SIZE==2 -pat blm $1==2 -with A_REG A_REG - kills allexceptcon - gen move_w {indirect2, %2}, {indirect2, %1} -#endif - -pat blm $1==4 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - -#if WORD_SIZE==2 -pat blm $1==6 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - move_w {offsetted2, %2, 4}, {offsetted2, %1, 4} -#endif - -pat blm $1==8 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - move_l {offsetted4, %2, 4}, {offsetted4, %1, 4} - -pat blm $1>2*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG AA_REG - kills ALL - uses DD_REG4={const, $1/WORD_SIZE -1} - gen 1: - move_i {post_inc_int, %2}, {post_inc_int, %1} - dbf %a, {slabel, 1b} - -pat blm -with AA_REG AA_REG - kills ALL - uses DD_REG4={const,$1/WORD_SIZE} - gen 1: - move_i {post_inc_int, %2}, {post_inc_int, %1} - sub_l {const4, 1}, %a - bne {slabel, 1b} - -#if WORD_SIZE==2 -pat bls $1==2 -with DD_REG AA_REG AA_REG - kills ALL - gen asr_w {small_const, 1}, %1 - beq {slabel, 2f} - 1: - move_w {post_inc2, %3}, {post_inc2, %2} - sub_w {const, 1}, %1 - bne {slabel, 1b} - 2: -#endif - -pat bls $1==4 -with DD_REG4 AA_REG AA_REG - kills ALL - gen -#if WORD_SIZE==2 - asr_l {small_const, 1}, %1 -#else - asr_l {small_const, 2}, %1 -#endif - beq {slabel, 2f} - 1: - move_i {post_inc_int, %3}, {post_inc_int, %2} - sub_l {const4, 1}, %1 - bne {slabel, 1b} - 2: - -#if WORD_SIZE==2 -pat csa $1==2 -#if TBL68020 -with any4 D_REG+LOCAL+const+ILOCAL+absolute2 STACK -#else -with any4 D_REG+LOCAL+const+absolute2 STACK -#endif - gen move %1,a0 - move %2,d0 - jmp {absolute4, ".csa2"} -#endif - -pat csa $1==4 -#if TBL68020 && WORD_SIZE==4 -with any4 D_REG4+DLOCAL+const4+ILOCAL+absolute4 STACK -#else -with any4 D_REG4+DLOCAL+const4+absolute4 STACK -#endif - gen move %1,a0 - move %2,dl0 - jmp {absolute4, ".csa4"} - -#if WORD_SIZE==2 -pat csb $1==2 -#if TBL68020 -with any4 D_REG+LOCAL+const+ILOCAL+absolute2 STACK -#else -with any4 D_REG+LOCAL+const+absolute2 STACK -#endif - gen move %1,a0 - move %2,d0 - jmp {absolute4, ".csb2"} -#endif - -pat csb $1==4 -#if TBL68020 && WORD_SIZE==4 -with any4 D_REG4+DLOCAL+const4+ILOCAL+absolute4 STACK -#else -with any4 D_REG4+DLOCAL+const4+absolute4 STACK -#endif - gen move %1,a0 - move %2,dl0 - jmp {absolute4, ".csb4"} - -pat dch leaving loi 4 - -#if WORD_SIZE==2 -pat dup $1==2 -with dups2 yields %1 %1 -#endif - -pat dup $1==4 -#if WORD_SIZE==2 -with dups2 dups2 yields %2 %1 %2 %1 -#endif -with dups4 yields %1 %1 - -pat dup $1==8 -with dups4 dups4 yields %2 %1 %2 %1 - -pat dup $1>2*WORD_SIZE && $1/WORD_SIZE<=65536 -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - move_i {offsetted_int, sp, $1 -WORD_SIZE}, {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat dup -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE} - gen 1: - move_i {offsetted_int, sp, $1 -WORD_SIZE}, {pre_dec_int, sp} - sub_l {const4, 1}, %a - bne {slabel, 1b} - -#if WORD_SIZE==2 -pat dus $1==2 -with any2 STACK - uses DD_REG4 = {zero_const4, 0}, AA_REG - gen - move_w %1, %a.1 - lea {regAregXcon, sp, %a, 1, 0}, %b - asr_l {small_const, 1}, %a - beq {slabel, 2f} - 1: - move_w {pre_dec2, %b}, {pre_dec2, sp} - sub_l {const4, 1}, %a - bne {slabel, 1b} - 2: -#endif - -pat dus $1==4 -with DD_REG4 STACK - uses AA_REG - gen - lea {regAregXcon, sp, %1, 1, 0}, %a -#if WORD_SIZE==2 - asr_l {small_const, 1}, %1 -#else - asr_l {small_const, 2}, %1 -#endif - beq {slabel, 2f} - 1: - move_i {pre_dec_int, %a}, {pre_dec_int, sp} - sub_l {const4, 1}, %1 - bne {slabel, 1b} - 2: - -#if WORD_SIZE==2 -pat exg $1==2 -with any2 any2 yields %1 %2 -#endif - -pat exg $1==4 -with any4 any4 yields %1 %2 - -pat exg defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".exg"} - -pat exg !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".exg"} - -pat fil - gen move_l {ext_addr, $1}, {absolute4, ".filn"} - -pat gto -with STACK - uses AA_REG = {ext_addr, $1} - gen move_l {offsetted4, %a, 8}, lb - move_l {offsetted4, %a, 4}, sp -#if TBL68020 && FANCY_MODES - jmp {OFF_off4, %a, 0, 0} -#else - move_l {indirect4, %a}, %a - jmp {indirect4, %a} -#endif - -pat lim yields {absolute_int, ".trpim"} - -pat lin - kills posextern - gen move_i {const, $1}, {absolute_int, ".lino"} - -pat lni - kills posextern - gen add_i {const, 1}, {absolute_int, ".lino"} - -pat lor $1==0 yields lb - -pat lor $1==1 -with STACK - uses AA_REG = sp yields %a - -pat lor $1==2 yields {absolute4, ".reghp"} - -pat lpb leaving adp 8 - -pat mon -with STACK - kills ALL - gen jsr {absolute4, ".mon"} - -pat nop -with STACK - kills ALL -#ifdef DEBUG - gen jsr {absolute4, ".nop"} -#endif - -#if WORD_SIZE==2 -pat rck $1==2 -#ifdef TBL68020 -with ext_addr D_REG - gen cmp2_w {absolute2, %1.bd}, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with address-ext_addr D_REG - gen cmp2_w %1, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with A_REG D_REG - gen cmp2_w {indirect2, %1}, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -#else -with STACK - kills ALL - gen jsr {absolute4, ".rck"} -#endif -#endif /* WORD_SIZE==2 */ - -#if WORD_SIZE==4 || TBL68020 -pat rck $1==4 -#ifdef TBL68020 -with ext_addr D_REG4 - gen cmp2_l {absolute4, %1.bd}, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with address-ext_addr D_REG4 - gen cmp2_l %1, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with A_REG D_REG4 - gen cmp2_l {indirect4, %1}, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".rck"} -#endif /* TBL68020 */ -#endif /* WORD_SIZE==4 || TBL68020 */ - -pat rtt leaving ret 0 - -pat sig -with any4 - kills posextern - uses AA_REG - gen move_l {absolute4, ".trppc"}, %a - move_l %1, {absolute4, ".trppc"} - yields %a - -pat sim -with any_int - kills posextern - gen move_i %1, {absolute_int, ".trpim"} - -pat str $1==0 -with any4 STACK - kills ALL - gen move_l %1, lb - -pat str $1==1 -with any4 STACK - gen move_l %1, sp - -pat str $1==2 -with STACK - kills ALL - gen jsr {absolute4, ".strhp"} - -pat trp -with STACK - kills ALL - gen jsr {absolute4, ".trp"} - - - -/************************************************ - * more rules for long EM-patterns * - ************************************************/ - -pat loe ine $1==$2 - kills posextern - uses DD_REG = {absolute_int, $1} - gen add_i {const,1}, {absolute_int, $1} - killreg %a - yields %a - -pat loe dee $1==$2 - kills posextern - uses DD_REG = {absolute_int, $1} - gen sub_i {const,1}, {absolute_int, $1} - killreg %a - yields %a - - -proc llol1shstl example lol loc sli stl /* only left */ - kills all_indir, DLOCAL %bd==$1 - gen shw* {offsetted2, lb, $1+2} - roxl {offsetted2, lb, $1} - -proc lloe1shste example loe loc sli ste /* only left */ - kills posextern - gen shw* {absolute2, $1+2} - roxl {absolute2, $1} - -proc llil1shsil example lil loc sli sil /* only left */ - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen shw* {OFF_off2, lb, $1, 2} - roxl {OFF_off2, lb, $1, 0} -#else - uses AA_REG = {DLOCAL, $1} - gen shw* {offsetted2, %a, 2} - roxl {indirect2, %a} -#endif - -proc rlol1shstl example lol loc sri stl /* only right */ - kills all_indir, DLOCAL %bd==$1 - gen shw* {offsetted2, lb, $1} - roxr {offsetted2, lb, $1+2} - -proc rloe1shste example loe loc sri ste /* only right */ - kills posextern - gen shw* {absolute2, $1} - roxr {absolute2, $1+2} - -proc rlil1shsil example lil loc sri sil /* only right */ - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen shw* {OFF_off2, lb, $1, 0} - roxr {OFF_off2, lb, $1, 2} -#else - uses AA_REG = {DLOCAL, $1} - gen shw* {indirect2, %a} - roxr {offsetted2, %a, 2} -#endif - -pat lol loc sli stl $1==$4 && $2==1 && $3==4 call llol1shstl("asl #1,") -pat loe loc sli ste $1==$4 && $2==1 && $3==4 call lloe1shste("asl #1,") -pat lil loc sli sil $1==$4 && $2==1 && $3==4 call llil1shsil("asl #1,") -pat lol loc sri stl $1==$4 && $2==1 && $3==4 call rlol1shstl("asr #1,") -pat loe loc sri ste $1==$4 && $2==1 && $3==4 call rloe1shste("asr #1,") -pat lil loc sri sil $1==$4 && $2==1 && $3==4 call rlil1shsil("asr #1,") -pat lol loc slu stl $1==$4 && $2==1 && $3==4 call llol1shstl("asl #1,") -pat loe loc slu ste $1==$4 && $2==1 && $3==4 call lloe1shste("asl #1,") -pat lil loc slu sil $1==$4 && $2==1 && $3==4 call llil1shsil("asl #1,") -pat lol loc sru stl $1==$4 && $2==1 && $3==4 call rlol1shstl("lsr #1,") -pat loe loc sru ste $1==$4 && $2==1 && $3==4 call rloe1shste("lsr #1,") -pat lil loc sru sil $1==$4 && $2==1 && $3==4 call rlil1shsil("lsr #1,") - - -proc txxand -with test_set_int DD_REG - gen test %1 - bxx[1] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 - -proc txxior -with test_set_int DD_REG - gen test %1 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 - -proc txxand_ouch -with test_set_int DD_REG - gen killcc. - test %1 - bxx[1] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 - -proc txxior_ouch -with test_set_int DD_REG - gen killcc. - test %1 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 - -pat tlt and $2==WORD_SIZE call txxand("bmi", "bcs") -pat tle and $2==WORD_SIZE call txxand_ouch("ble", "bls") -pat teq and $2==WORD_SIZE call txxand("beq", "beq") -pat tne and $2==WORD_SIZE call txxand("bne", "bne") -pat tge and $2==WORD_SIZE call txxand("bpl", "bcc") -pat tgt and $2==WORD_SIZE call txxand_ouch("bgt", "bhi") - -pat tlt ior $2==WORD_SIZE call txxior("bpl", "bcc") -pat tle ior $2==WORD_SIZE call txxior_ouch("bgt", "bhi") -pat teq ior $2==WORD_SIZE call txxior("bne", "bne") -pat tne ior $2==WORD_SIZE call txxior("beq", "beq") -pat tge ior $2==WORD_SIZE call txxior("bmi", "bcs") -pat tgt ior $2==WORD_SIZE call txxior_ouch("ble", "bls") - -proc cmxtxxand -with exact extend1 extend1 DD_REG - gen cmp_b %2, %1 - bxx[2] {llabel,1f} - bclr {const,0}, %3 - 1: yields %3 -with exact extend2 extend2 DD_REG - gen cmp_w %2, %1 - bxx[2] {llabel,1f} - bclr {const,0}, %3 - 1: yields %3 -with exact sconsts any_int DD_REG - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact any_int sconsts DD_REG - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with any_int-sconsts genreg DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with genreg any_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact immediate_int-sconsts imm_cmp_int DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact imm_cmp_int immediate_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 - -proc cmxtxxior -with exact extend1 extend1 DD_REG - gen cmp_b %2, %1 - bxx[2] {llabel,1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact extend2 extend2 DD_REG - gen cmp_w %2, %1 - bxx[2] {llabel,1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact sconsts any_int DD_REG - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact any_int sconsts DD_REG - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with any_int-sconsts genreg DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with genreg any_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact immediate_int-sconsts imm_cmp_int DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact imm_cmp_int immediate_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 - -proc cmxtxx -with exact sconsts any_int - uses DD_REG=%1 - gen cmp_i %2, %a - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact any_int sconsts - uses DD_REG=%2 - gen cmp_i %1, %a - sxx[1] %a - neg_b %a - yields {extend1, %a} -with any_int-sconsts genreg - uses reusing %1,reusing %2,DD_REG - gen cmp_i %1, %2 - sxx[1] %a - neg_b %a - yields {extend1, %a} -with genreg any_int-sconsts - uses reusing %1,reusing %2,DD_REG - gen cmp_i %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact extend1 extend1 - uses reusing %1,reusing %2,DD_REG - gen cmp_b %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact extend2 extend2 - uses reusing %1,reusing %2,DD_REG - gen cmp_w %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact immediate_int-sconsts imm_cmp_int - uses reusing %2,DD_REG - gen cmp_i %1, %2 - sxx[1] %a - neg_b %a - yields {extend1, %a} -with exact imm_cmp_int immediate_int-sconsts - uses reusing %1,DD_REG - gen cmp_i %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact immediate_int-sconsts STACK - uses DD_REG - gen cmp_i %1, {post_inc_int, sp} - sxx[1] %a - neg_b %a - yields {extend1, %a} -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - sxx[2] %a - neg_b %a - yields {extend1, %a} - -pat cmi tlt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("blt","bgt") -pat cmi tle and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("ble","bge") -pat cmi teq and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("beq","beq") -pat cmi tne and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bne","bne") -pat cmi tge and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bge","ble") -pat cmi tgt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bgt","blt") - -pat cmu tlt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bcs","bhi") -pat cmu tle and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bls","bcc") -pat cmu teq and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("beq","beq") -pat cmu tne and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bne","bne") -pat cmu tge and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bcc","bls") -pat cmu tgt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bhi","bcs") - -pat cmi tlt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bge","ble") -pat cmi tle ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bgt","blt") -pat cmi teq ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bne","bne") -pat cmi tne ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("beq","beq") -pat cmi tge ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("blt","bgt") -pat cmi tgt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("ble","bge") - -pat cmu tlt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bcc","bls") -pat cmu tle ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bhi","bcs") -pat cmu teq ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bne","bne") -pat cmu tne ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("beq","beq") -pat cmu tge ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bcs","bhi") -pat cmu tgt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bls","bcc") - -pat cmi tlt $1==WORD_SIZE call cmxtxx("slt","sgt") -pat cmi tle $1==WORD_SIZE call cmxtxx("sle","sge") -pat cmi teq $1==WORD_SIZE call cmxtxx("seq","seq") -pat cmi tne $1==WORD_SIZE call cmxtxx("sne","sne") -pat cmi tge $1==WORD_SIZE call cmxtxx("sge","sle") -pat cmi tgt $1==WORD_SIZE call cmxtxx("sgt","slt") - -pat cmu tlt $1==WORD_SIZE call cmxtxx("scs","shi") -pat cmu tle $1==WORD_SIZE call cmxtxx("sls","scc") -pat cmu teq $1==WORD_SIZE call cmxtxx("seq","seq") -pat cmu tne $1==WORD_SIZE call cmxtxx("sne","sne") -pat cmu tge $1==WORD_SIZE call cmxtxx("scc","sls") -pat cmu tgt $1==WORD_SIZE call cmxtxx("shi","scs") - - -proc cmuzxx example cmu zlt -with exact sconsts any_int - kills ALL - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {llabel, $2} -with exact any_int sconsts - kills ALL - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {llabel, $2} -with any_int-sconsts genreg STACK - gen cmp_i %1, %2 - bxx[1] {llabel, $2} -with genreg any_int-sconsts STACK - gen cmp_i %2, %1 - bxx[2] {llabel, $2} -with exact immediate_int-sconsts imm_cmp_int - kills ALL - gen cmp_i %1, %2 - bxx[1] {llabel, $2} -with exact imm_cmp_int immediate_int-sconsts - kills ALL - gen cmp_i %2, %1 - bxx[2] {llabel, $2} -with exact immediate_int-sconsts STACK - gen cmp_i %1, {post_inc_int, sp} - bxx[1] {llabel, $2} -with exact any_int STACK - uses reusing %1, DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - bxx[2] {llabel, $2} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - bxx[2] {llabel, $2} -with data2-sconsts dreg2 STACK - gen cmp_w %1, %2 - bxx[1] {llabel, $2} -with dreg2 data2-conreg2-sconsts STACK - gen cmp_w %2, %1 - bxx[2] {llabel, $2} -with data1 dreg1 STACK - gen cmp_b %1, %2 - bxx[1] {llabel, $2} -with dreg1 data1-conreg1 STACK - gen cmp_b %2, %1 - bxx[2] {llabel, $2} - -pat cmu zlt $1==WORD_SIZE call cmuzxx("bcs","bhi") -pat cmu zle $1==WORD_SIZE call cmuzxx("bls","bcc") -pat cmu zeq $1==WORD_SIZE call cmuzxx("beq","beq") -pat cmu zne $1==WORD_SIZE call cmuzxx("bne","bne") -pat cmu zge $1==WORD_SIZE call cmuzxx("bcc","bls") -pat cmu zgt $1==WORD_SIZE call cmuzxx("bhi","bcs") - - -#if TBL68881 -proc cmf4zxx example cmf zlt -with FS_REG FS_REG - gen fcmp %1,%2 - bxx* {llabel, $2} - -pat cmf zlt $1==4 call cmf4zxx("fblt") -pat cmf zle $1==4 call cmf4zxx("fble") -pat cmf zne $1==4 call cmf4zxx("fbne") -pat cmf zeq $1==4 call cmf4zxx("fbeq") -pat cmf zge $1==4 call cmf4zxx("fbge") -pat cmf zgt $1==4 call cmf4zxx("fbgt") - -proc cmf8zxx example cmf zlt -with FD_REG FD_REG - gen fcmp %1,%2 - bxx* {llabel, $2} - -pat cmf zlt $1==8 call cmf8zxx("fblt") -pat cmf zle $1==8 call cmf8zxx("fble") -pat cmf zne $1==8 call cmf8zxx("fbne") -pat cmf zeq $1==8 call cmf8zxx("fbeq") -pat cmf zge $1==8 call cmf8zxx("fbge") -pat cmf zgt $1==8 call cmf8zxx("fbgt") -#endif - - -proc loc1locciibxx example loc loc cii bne -with any1 extend1 STACK - gen cmp_b %1,%2 - bxx[1] {llabel, $4} -with any1 any_int STACK - uses reusing %1, DD_REG = %1 -#if TBL68020 && WORD_SIZE==4 - gen extb_l %a -#else - gen ext_w %a -#if WORD_SIZE==4 - ext_l %a -#endif -#endif - cmp_i %2,%a - bxx[2] {llabel, $4} - -pat loc loc cii blt $1==1 && $2==EM_WSIZE call loc1locciibxx("blt","bgt") -pat loc loc cii ble $1==1 && $2==EM_WSIZE call loc1locciibxx("ble","bge") -pat loc loc cii bne $1==1 && $2==EM_WSIZE call loc1locciibxx("bne","bne") -pat loc loc cii beq $1==1 && $2==EM_WSIZE call loc1locciibxx("beq","beq") -pat loc loc cii bge $1==1 && $2==EM_WSIZE call loc1locciibxx("bge","ble") -pat loc loc cii bgt $1==1 && $2==EM_WSIZE call loc1locciibxx("bgt","blt") - -#if WORD_SIZE==4 -proc loc2locciibxx example loc loc cii bne -with any2 extend2 STACK - gen cmp_w %1,%2 - bxx[1] {llabel, $4} -with any2 any4 STACK - uses reusing %1, DD_REG = %1 - gen ext_l %a - cmp_l %2,%a - bxx[2] {llabel, $4} - -pat loc loc cii blt $1==2 && $2==EM_WSIZE call loc2locciibxx("blt","bgt") -pat loc loc cii blt $1==2 && $2==EM_WSIZE call loc2locciibxx("blt","bgt") -pat loc loc cii ble $1==2 && $2==EM_WSIZE call loc2locciibxx("ble","bge") -pat loc loc cii bne $1==2 && $2==EM_WSIZE call loc2locciibxx("bne","bne") -pat loc loc cii beq $1==2 && $2==EM_WSIZE call loc2locciibxx("beq","beq") -pat loc loc cii bge $1==2 && $2==EM_WSIZE call loc2locciibxx("bge","ble") -pat loc loc cii bgt $1==2 && $2==EM_WSIZE call loc2locciibxx("bgt","blt") -#endif - -proc bxx1_in example loc loc cii loc bne -with imm_cmp1 STACK - gen cmp_b {const, low8($4)}, %1 - bxx* {llabel, $5} - -#if WORD_SIZE!=2 -proc bxx2_in example loc loc cii loc bne -with imm_cmp2 STACK - gen cmp_w {const, loww($4)}, %1 - bxx* {llabel, $5} -#endif - -proc bxx1_small example loc bne -with imm_cmp1-D_REG STACK - gen cmp_b {const, $1}, %1 - bxx[1] {llabel, $2} -with imm_cmp2-D_REG STACK - gen cmp_w {const, $1}, %1 - bxx[1] {llabel, $2} -with data_int STACK -uses DD_REG = {small_const, $1} /* uses moveq */ - gen cmp_i %1,%a - bxx[2] {llabel, $2} - -#if WORD_SIZE!=2 -proc bxx2_small example loc bne -with imm_cmp2-D_REG STACK - gen cmp_w {const, $1}, %1 - bxx[1] {llabel, $2} -with imm_cmp4 STACK - gen cmp_l {const, $1}, %1 - bxx[2] {llabel, $2} -#endif - -proc zxx1_in example loc loc cii zne -with test_set1 STACK - gen test %1 - bxx* {llabel, $4} -with D_REG STACK - gen test {dreg1, %1} - bxx* {llabel, $4} - -#if WORD_SIZE!=2 -proc zxx2_in example loc loc cii zne -with test_set2 STACK - gen test %1 - bxx* {llabel, $4} -with D_REG STACK - gen test {dreg2, %1} - bxx* {llabel, $4} -#endif - -pat loc loc cii zlt $1==1 && $2==WORD_SIZE call zxx1_in("blt") -pat loc loc cii zle $1==1 && $2==WORD_SIZE call zxx1_in("ble") -pat loc loc cii zne $1==1 && $2==WORD_SIZE call zxx1_in("bne") -pat loc loc cii zeq $1==1 && $2==WORD_SIZE call zxx1_in("beq") -pat loc loc cii zge $1==1 && $2==WORD_SIZE call zxx1_in("bge") -pat loc loc cii zgt $1==1 && $2==WORD_SIZE call zxx1_in("bgt") - -#if WORD_SIZE!=2 -pat loc loc cii zlt $1==2 && $2==4 call zxx2_in("blt") -pat loc loc cii zle $1==2 && $2==4 call zxx2_in("ble") -pat loc loc cii zne $1==2 && $2==4 call zxx2_in("bne") -pat loc loc cii zeq $1==2 && $2==4 call zxx2_in("beq") -pat loc loc cii zge $1==2 && $2==4 call zxx2_in("bge") -pat loc loc cii zgt $1==2 && $2==4 call zxx2_in("bgt") -#endif - -pat loc loc cii loc blt $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("blt") -pat loc loc cii loc ble $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("ble") -pat loc loc cii loc beq $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("beq") -pat loc loc cii loc bne $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bne") -pat loc loc cii loc bge $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bge") -pat loc loc cii loc bgt $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bgt") - -#if WORD_SIZE!=2 -pat loc loc cii loc blt $1==2 && $2==4 && in_2($4) call bxx2_in("blt") -pat loc loc cii loc ble $1==2 && $2==4 && in_2($4) call bxx2_in("ble") -pat loc loc cii loc beq $1==2 && $2==4 && in_2($4) call bxx2_in("beq") -pat loc loc cii loc bne $1==2 && $2==4 && in_2($4) call bxx2_in("bne") -pat loc loc cii loc bge $1==2 && $2==4 && in_2($4) call bxx2_in("bge") -pat loc loc cii loc bgt $1==2 && $2==4 && in_2($4) call bxx2_in("bgt") -#endif - -/* the second instruction for bxx1_small is the other way around! */ -pat loc blt $1>=0 && $1<128 call bxx1_small("bcs", "bgt") -pat loc ble $1>=0 && $1<128 call bxx1_small("bls", "bge") -pat loc beq $1>=0 && $1<128 call bxx1_small("beq", "beq") -pat loc bne $1>=0 && $1<128 call bxx1_small("bne", "bne") -pat loc bge $1>=0 && $1<128 call bxx1_small("bcc", "ble") -pat loc bgt $1>=0 && $1<128 call bxx1_small("bhi", "blt") - -#if WORD_SIZE!=2 -pat loc blt $1>=128 && $1<32768 call bxx2_small("bcs", "blt") -pat loc ble $1>=128 && $1<32768 call bxx2_small("bls", "ble") -pat loc beq $1>=128 && $1<32768 call bxx2_small("beq", "beq") -pat loc bne $1>=128 && $1<32768 call bxx2_small("bne", "bne") -pat loc bge $1>=128 && $1<32768 call bxx2_small("bcc", "bge") -pat loc bgt $1>=128 && $1<32768 call bxx2_small("bhi", "bgt") -#endif - - -pat loc loc cii lal sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lal $4 sti $5 -pat loc loc cii lol sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lol $4 sti $5 -pat loc loc cii lil sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lil $4 sti $5 -pat loc loc cii LLP lof sti $1 <= WORD_SIZE && $1>=$6 && $2==WORD_SIZE - leaving LLP $4 lof $5 sti $6 -pat loc loc cii lae sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lae $4 sti $5 -pat loc loc cii loe sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving loe $4 sti $5 - -pat loc loc cii stl $1==1 && $2==WORD_SIZE && inreg($4)==reg_any -with memory1+DD_REG - kills regvar($4, reg_any), use_index %xreg==regvar($4, reg_any) - gen move_b %1, {dreg1, regvar($4,reg_any)} -#if WORD_SIZE==2 - ext_w {LOCAL,$4} -#else -#ifdef TBL68020 - extb_l {LOCAL,$4} -#else /* TBL68020 */ - ext_w {LOCAL,$4} - ext_l {LOCAL,$4} -#endif /* TBL68020 */ -#endif - -pat loc loc cii $1==2 && $2==4 -#if WORD_SIZE==2 -with D_REG -uses reusing %1, DD_REG4 - gen move %1,%a.1 yields {extend2, %a} -with exact extend1 - uses reusing %1,DD_REG4 - gen move %1.reg,%a.1 yields {extend1_4, %a} -with exact memory2 -uses reusing %1,DD_REG4 - gen move %1, %a.1 yields {extend2, %a} -#else -with DD_REG yields {extend2, %1} -with exact memory2 -uses reusing %1,DD_REG=%1 - yields {extend2, %a} -#endif - -pat loc loc cii $1==1 && $2==WORD_SIZE -with DD_REG yields {extend1, %1} -with exact memory1 -uses reusing %1,DD_REG = %1 - yields {extend1, %a} - -#if WORD_SIZE==2 -pat loc loc cii $1==1 && $2==4 -with DD_REG -uses reusing %1, DD_REG4 - gen move %1, %a.1 - yields {extend1_4, %a} -with exact memory1 -uses reusing %1,DD_REG4 - gen move %1,%a.1 yields {extend1_4, %a} -#endif - -pat loc loc ciu $1==$2 /* skip this */ -pat loc loc cui $1==$2 /* skip this */ - - -/* The following rules should be handled by the peephole optimizer, I think */ - -#if WORD_SIZE==2 -pat ldc dvu highw($1)==0 && loww($1)==2 && $2==4 leaving loc 1 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==4 && $2==4 leaving loc 2 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==8 && $2==4 leaving loc 3 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==16 && $2==4 leaving loc 4 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==32 && $2==4 leaving loc 5 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==64 && $2==4 leaving loc 6 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==128 && $2==4 leaving loc 7 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==256 && $2==4 leaving loc 8 sru 4 -#endif - -pat loc dvu $1==2 && $2==WORD_SIZE leaving loc 1 sru WORD_SIZE -pat loc dvu $1==4 && $2==WORD_SIZE leaving loc 2 sru WORD_SIZE -pat loc dvu $1==8 && $2==WORD_SIZE leaving loc 3 sru WORD_SIZE -pat loc dvu $1==16 && $2==WORD_SIZE leaving loc 4 sru WORD_SIZE -pat loc dvu $1==32 && $2==WORD_SIZE leaving loc 5 sru WORD_SIZE -pat loc dvu $1==64 && $2==WORD_SIZE leaving loc 6 sru WORD_SIZE -pat loc dvu $1==128 && $2==WORD_SIZE leaving loc 7 sru WORD_SIZE -pat loc dvu $1==256 && $2==WORD_SIZE leaving loc 8 sru WORD_SIZE - -#if WORD_SIZE==2 -pat ldc dvi highw($1)==0 && loww($1)==2 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 1 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==4 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 2 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==8 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 3 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==16 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 4 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==32 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 5 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==64 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 6 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==128 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 7 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==256 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 8 sri 4 -#endif /* WORD_SIZE==2 */ - -pat loc dvi $1==2 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 1 sri WORD_SIZE - -pat loc dvi $1==4 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 2 sri WORD_SIZE - -pat loc dvi $1==8 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 3 sri WORD_SIZE - -pat loc dvi $1==16 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 4 sri WORD_SIZE - -pat loc dvi $1==32 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 5 sri WORD_SIZE - -pat loc dvi $1==64 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 6 sri WORD_SIZE - -pat loc dvi $1==128 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 7 sri WORD_SIZE - -pat loc dvi $1==256 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 8 sri WORD_SIZE - -/* The rest is all 2-bytes stuff */ -#if WORD_SIZE==2 -pat loc loc cii $1==4 && $2==2 -with D_REG4 - yields %1.1 -with any2-pre_post any2-pre_post - yields %2 - -proc cmqtxx -with exact sconsts4 any4 - uses DD_REG4=%1 - gen cmp_l %2, %a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact any4 sconsts4 - uses DD_REG4=%2 - gen cmp_l %1, %a - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with any4-sconsts4 genreg4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_l %1, %2 - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with genreg4 any4-sconsts4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_l %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact extend1_4 extend1_4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_b %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact extend2 extend2 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_w %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact immediate4-sconsts4 imm_cmp4 - uses reusing %2,DD_REG4 - gen cmp_l %1, %2 - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact imm_cmp4 immediate4-sconsts4 - uses reusing %1,DD_REG4 - gen cmp_l %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact immediate4-sconsts4 STACK - uses DD_REG4 - gen cmp_l %1, {post_inc4, sp} - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen cmp_l {post_inc4, sp}, %a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact STACK - uses DD_REG4 - gen move_l {post_inc4, sp},%a - cmp_l {post_inc4, sp},%a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} - -pat cmi tlt $1==4 call cmqtxx("slt","sgt") -pat cmi tle $1==4 call cmqtxx("sle","sge") -pat cmi teq $1==4 call cmqtxx("seq","seq") -pat cmi tne $1==4 call cmqtxx("sne","sne") -pat cmi tge $1==4 call cmqtxx("sge","sle") -pat cmi tgt $1==4 call cmqtxx("sgt","slt") - -pat cmu tlt $1==4 call cmqtxx("scs","shi") -pat cmu tle $1==4 call cmqtxx("sls","scc") -pat cmu teq $1==4 call cmqtxx("seq","seq") -pat cmu tne $1==4 call cmqtxx("sne","sne") -pat cmu tge $1==4 call cmqtxx("scc","sls") -pat cmu tgt $1==4 call cmqtxx("shi","scs") - - -proc cmqzxx example cmu zlt -with zero_const4 test_set4 STACK - /* kills ALL */ - gen test %2 - bxx[1] {llabel, $2} -with exact sconsts4-zero_const4 any4 - kills ALL - uses DD_REG4=%1 - gen cmp_l %2, %a - bxx[2] {llabel, $2} -with exact any4 sconsts4 - kills ALL - uses DD_REG4=%2 - gen cmp_l %1, %a - bxx[1] {llabel, $2} -with any4-sconsts4-zero_const4 genreg4 STACK - gen cmp_l %1, %2 - bxx[1] {llabel, $2} -with genreg4 any4-sconsts4-zero_const4 STACK - gen cmp_l %2, %1 - bxx[2] {llabel, $2} -with exact immediate4-sconsts4-zero_const4 imm_cmp4 - kills ALL - gen cmp_l %1, %2 - bxx[1] {llabel, $2} -with exact imm_cmp4 immediate4-sconsts4-zero_const4 - kills ALL - gen cmp_l %2, %1 - bxx[2] {llabel, $2} -with exact immediate4-sconsts4-zero_const4 STACK - gen cmp_l %1, {post_inc4, sp} - bxx[1] {llabel, $2} -with exact any4 STACK - uses reusing %1, DD_REG4=%1 - gen cmp_l {post_inc4, sp}, %a - bxx[2] {llabel, $2} -with exact STACK - uses DD_REG4 - gen move_l {post_inc4, sp},%a - cmp_l {post_inc4, sp},%a - bxx[2] {llabel, $2} -with data2-sconsts dreg2 STACK - gen cmp_w %1, %2 - bxx[1] {llabel, $2} -with dreg2 data2-conreg2-sconsts STACK - gen cmp_w %2, %1 - bxx[2] {llabel, $2} -with data1 dreg1 STACK - gen cmp_b %1, %2 - bxx[1] {llabel, $2} -with dreg1 data1-conreg1 STACK - gen cmp_b %2, %1 - bxx[2] {llabel, $2} - -pat cmi zlt $1==4 call cmqzxx("blt","bgt") -pat cmi zle $1==4 call cmqzxx("ble","bge") -pat cmi zeq $1==4 call cmqzxx("beq","beq") -pat cmi zne $1==4 call cmqzxx("bne","bne") -pat cmi zge $1==4 call cmqzxx("bge","ble") -pat cmi zgt $1==4 call cmqzxx("bgt","blt") - -pat cms zeq $1==4 call cmqzxx("beq","beq") -pat cms zne $1==4 call cmqzxx("bne","bne") - -pat cmu zlt $1==4 call cmqzxx("bcs","bhi") -pat cmu zle $1==4 call cmqzxx("bls","bcc") -pat cmu zeq $1==4 call cmqzxx("beq","beq") -pat cmu zne $1==4 call cmqzxx("bne","bne") -pat cmu zge $1==4 call cmqzxx("bcc","bls") -pat cmu zgt $1==4 call cmqzxx("bhi","bcs") - -pat ldc cms zeq loww($1)==0 && highw($1)==0 && $2==4 -with test_set4 STACK - gen test %1 - beq {llabel, $3} - -pat ldc cms zne loww($1)==0 && highw($1)==0 && $2==4 -with test_set4 STACK - gen test %1 - bne {llabel, $3} -#endif diff --git a/mach/mantra/cv/Makefile b/mach/mantra/cv/Makefile deleted file mode 100644 index 5b237fcff..000000000 --- a/mach/mantra/cv/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv Xcv - -all: $(TARGETS) - -install: all - ../../install cv - ../../install Xcv - -cmp: all - ../../compare cv - ../../compare Xcv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -Xcv: Xcv.o - $(CC) $(LDFLAGS) -o Xcv Xcv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c Xcv.c - -opr: - make pr | opr diff --git a/mach/mantra/int/Makefile b/mach/mantra/int/Makefile deleted file mode 100644 index 71ef3cc1e..000000000 --- a/mach/mantra/int/Makefile +++ /dev/null @@ -1,81 +0,0 @@ -EMHOME=../../.. -INTS=em2_t--- em2_---- em2_t-cp em2_t-c- em2_t--p \ -em4_t--- em4_---- em4_t-cp em4_t-c- em4_t--p -P = mloop -FILES=deffile $P0 $P1 $P2 $P3 $P4 $P5 $P6 $P7 $P8 $P9 $Pa $Pb $Pc -CPP=$(EMHOME)/lib/cpp -b=$(EMHOME)/lib/em -CFLAGS=-I$(EMHOME)/h -O -FLTRAP= - -all: $(INTS) em - -em: em.c - $(CC) $(CFLAGS) -o em em.c - -tmp.s: $(FILES) - cat $(FILES) > tmp.s - -em2_t---: tmp.s compile con_float.o - ./compile -o em2_t--- -P $(FLTRAP) -Dopfreq=0 -Dlast=1 -Dcount=0 -Dtest=1 -Dflow=0 -Dprof=0 tmp.s con_float.o - -em2_----: tmp.s compile con_float.o - ./compile -o em2_---- -P $(FLTRAP) -Dopfreq=0 -Dlast=0 -Dcount=0 -Dtest=0 -Dflow=0 -Dprof=0 tmp.s con_float.o - -em2_t-cp: tmp.s compile con_float.o - ./compile -o em2_t-cp -P $(FLTRAP) -Dopfreq=0 -Dlast=1 -Dcount=1 -Dtest=1 -Dflow=0 -Dprof=1 tmp.s con_float.o - -em2_t-c-: tmp.s compile con_float.o - ./compile -o em2_t-c- -P $(FLTRAP) -Dopfreq=0 -Dlast=1 -Dcount=1 -Dtest=1 -Dflow=0 -Dprof=0 tmp.s con_float.o - -em2_t--p: tmp.s compile con_float.o - ./compile -o em2_t--p -P $(FLTRAP) -Dopfreq=0 -Dlast=1 -Dcount=0 -Dtest=1 -Dflow=0 -Dprof=1 tmp.s con_float.o - -em4_t---: tmp.s compile con_float.o - ./compile -o em4_t--- -P $(FLTRAP) -Dlword -Dopfreq=0 -Dlast=1 -Dcount=0 -Dtest=1 -Dflow=0 -Dprof=0 tmp.s con_float.o - -em4_----: tmp.s compile con_float.o - ./compile -o em4_---- -P $(FLTRAP) -Dlword -Dopfreq=0 -Dlast=0 -Dcount=0 -Dtest=0 -Dflow=0 -Dprof=0 tmp.s con_float.o - -em4_t-cp: tmp.s compile con_float.o - ./compile -o em4_t-cp -P $(FLTRAP) -Dlword -Dopfreq=0 -Dlast=1 -Dcount=1 -Dtest=1 -Dflow=0 -Dprof=1 tmp.s con_float.o - -em4_t-c-:tmp.s compile con_float.o - ./compile -o em4_t-c- -P $(FLTRAP) -Dlword -Dopfreq=0 -Dlast=1 -Dcount=1 -Dtest=1 -Dflow=0 -Dprof=0 tmp.s con_float.o - -em4_t--p: tmp.s compile con_float.o - ./compile -o em4_t--p -P $(FLTRAP) -Dlword -Dopfreq=0 -Dlast=1 -Dcount=0 -Dtest=1 -Dflow=0 -Dprof=1 tmp.s con_float.o - -con_float.o: con_float.c - case `ack_sys` in m68k2|pmds) \ - acc -I$(EMHOME)/mach -mm68k4 -c -L -O con_float.c;; \ - *) acc -c -I$(EMHOME)/mach -L -O con_float.c;; \ - esac - -compile: Makefile - case `ack_sys` in sun*) MACH=`ack_sys`; AS=-Ras=../../../lib/m68k2/as;; pmds*) MACH=pmds4;; \ - m68_sysV_0) MACH=mantra;; \ - *) MACH=m68k4;; \ - esac ; echo $$MACH $$AS -r.c -.m -fp '$$*' > compile; chmod +x compile -install: all - -mkdir $b24 $b44 - ls em2_???? | sed 's:em2_\(.*\):cp & $b24/em_\1:' | sh - ls em4_???? | sed 's:em4_\(.*\):cp & $b44/em_\1:' | sh - cp em ../../../bin/em - cp em.1 ../../../man/em.1 - -cmp: all - ls em2_???? | sed 's:em2_\(.*\):cmp & $b24/em_\1:' | sh - ls em4_???? | sed 's:em4_\(.*\):cmp & $b44/em_\1:' | sh - -cmp em ../../../bin/em - -cmp em.1 ../../../man/em.1 - -clean: - -rm -f *.o *.old a.out em tmp.s $(INTS) compile - -opr: - make pr | opr - -pr: - @pr `pwd`/makefile - @pr `pwd`/deffile `pwd`/$P? diff --git a/mach/mantra/int/header b/mach/mantra/int/header deleted file mode 100644 index ff0fa03e4..000000000 --- a/mach/mantra/int/header +++ /dev/null @@ -1,8 +0,0 @@ -!definitions -!#define lword -!#define FLTRAP -#define opfreq 0 -#define last 1 -#define test 1 -#define count 0 -#define flow 0 diff --git a/mach/mantra/int/mloope b/mach/mantra/int/mloope deleted file mode 100644 index 9507ea16e..000000000 --- a/mach/mantra/int/mloope +++ /dev/null @@ -1,11 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - .sect .text -end: - .sect .bss -endbss: - .sect .data -enddata: diff --git a/mach/mantra/int/prep b/mach/mantra/int/prep deleted file mode 100755 index 4f4c41996..000000000 --- a/mach/mantra/int/prep +++ /dev/null @@ -1,3 +0,0 @@ -rm -f temp.c -cat header deffile $1 >> temp.c -../../../lib/cpp -P temp.c >$2 diff --git a/mach/mantra/libsys/Makefile b/mach/mantra/libsys/Makefile deleted file mode 100644 index 142afee5a..000000000 --- a/mach/mantra/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=m68k4 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/mantra/libsys/compmodule b/mach/mantra/libsys/compmodule deleted file mode 100755 index 48038e37e..000000000 --- a/mach/mantra/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if mantra -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/minix/libsys/Makefile b/mach/minix/libsys/Makefile deleted file mode 100644 index 9a2007496..000000000 --- a/mach/minix/libsys/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -# $Header$ -MACH=minix - -all: libsys_o.a end.o head_em.o - -install: all - ../../install libsys_o.a tail_mon - ../../install head_em.o head_em - ../../install end.o end_em - -cmp: all - -../../compare libsys_o.a tail_mon - -../../compare head_em.o head_em - -../../compare end.o end_em - - -end.o: end.s - $(MACH) -I../../../h -O -c end.s - -head_em.o: head_em.s - $(MACH) -I../../../h -O -c head_em.s - -libsys.a: libsys_s.a - ASAR=aal ; export ASAR ;\ - march . libsys.a - -libsys_o.a: libsys.a ../../../lib/i86/tail_em - mkdir X; cd X; aal x ../../../../lib/i86/tail_em; aal x ../libsys.a; aal rv ../libsys_o.a *.o ; cd .. - rm -rf X - -clean: - rm -f *.o libsys_o.a libsys.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libsys.a | pr -h `pwd`/libsys.a - @pr `pwd`/end.s diff --git a/mach/minix/libsys/access.c b/mach/minix/libsys/access.c deleted file mode 100644 index 23a22dd38..000000000 --- a/mach/minix/libsys/access.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC int access(name, mode) -char *name; -int mode; -{ - return callm3(FS, ACCESS, mode, name); - -} diff --git a/mach/minix/libsys/alarm.c b/mach/minix/libsys/alarm.c deleted file mode 100644 index 9be91a8df..000000000 --- a/mach/minix/libsys/alarm.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int alarm(sec) -unsigned sec; -{ - return callm1(MM, ALARM, (int) sec, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/brk.c b/mach/minix/libsys/brk.c deleted file mode 100644 index f6a037728..000000000 --- a/mach/minix/libsys/brk.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "lib.h" - -extern char *brksize; - -PUBLIC char *brk(addr) -char *addr; -{ - int k; - - k = callm1(MM, BRK, 0, 0, 0, addr, NIL_PTR, NIL_PTR); - if (k == OK) { - brksize = M.m2_p1; - return(NIL_PTR); - } else { - return( (char*) -1 ); - } -} - - -PUBLIC char *sbrk(incr) -int incr; -{ - char *newsize, *oldsize; - - oldsize = brksize; - newsize = brksize + incr; - if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize) - return( (char *) -1); - if (brk(newsize) == 0) - return(oldsize); - else - return( (char *) -1 ); -} - diff --git a/mach/minix/libsys/chdir.c b/mach/minix/libsys/chdir.c deleted file mode 100644 index 357a979c9..000000000 --- a/mach/minix/libsys/chdir.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int chdir(name) -char *name; -{ - return callm3(FS, CHDIR, 0, name); - -} diff --git a/mach/minix/libsys/chmod.c b/mach/minix/libsys/chmod.c deleted file mode 100644 index 7ae3edad1..000000000 --- a/mach/minix/libsys/chmod.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC int chmod(name, mode) -char* name; -int mode; -{ - return callm3(FS, CHMOD, mode, name); - -} diff --git a/mach/minix/libsys/chown.c b/mach/minix/libsys/chown.c deleted file mode 100644 index 0846102c8..000000000 --- a/mach/minix/libsys/chown.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int chown(name, owner, grp) -char *name; -int owner, grp; -{ - return callm1(FS, CHOWN, len(name), owner, grp, name, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/chroot.c b/mach/minix/libsys/chroot.c deleted file mode 100644 index 520abaf1b..000000000 --- a/mach/minix/libsys/chroot.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int chroot(name) -char* name; -{ - return callm3(FS, CHROOT, 0, name); - -} diff --git a/mach/minix/libsys/close.c b/mach/minix/libsys/close.c deleted file mode 100644 index 72698b0bf..000000000 --- a/mach/minix/libsys/close.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int close(fd) -int fd; -{ - return callm1(FS, CLOSE, fd, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - -} diff --git a/mach/minix/libsys/compmodule b/mach/minix/libsys/compmodule deleted file mode 100755 index b622ec57f..000000000 --- a/mach/minix/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if minix -c -L -LIB $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/minix/libsys/creat.c b/mach/minix/libsys/creat.c deleted file mode 100644 index f9c13607f..000000000 --- a/mach/minix/libsys/creat.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int creat(name, mode) -char* name; -int mode; -{ - return callm3(FS, CREAT, mode, name); -} diff --git a/mach/minix/libsys/dup.c b/mach/minix/libsys/dup.c deleted file mode 100644 index f8683ea90..000000000 --- a/mach/minix/libsys/dup.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int dup(fd) -int fd; -{ - return callm1(FS, DUP, fd, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/dup2.c b/mach/minix/libsys/dup2.c deleted file mode 100644 index 67e7c3da3..000000000 --- a/mach/minix/libsys/dup2.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int dup2(fd, fd2) -int fd, fd2; -{ - return callm1(FS, DUP, fd+0100, fd2, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/end.s b/mach/minix/libsys/end.s deleted file mode 100644 index 6b9ce418e..000000000 --- a/mach/minix/libsys/end.s +++ /dev/null @@ -1,17 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define endtext,enddata,endbss -.define _end,_etext,_edata - - ! $Header$ - .sect .text -endtext: -_etext: - .align 2 - .sect .data -enddata: -_edata: - .align 2 -.sect .endsect -_end: -endbss: - .align 2 diff --git a/mach/minix/libsys/exec.c b/mach/minix/libsys/exec.c deleted file mode 100644 index cb2be5520..000000000 --- a/mach/minix/libsys/exec.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "lib.h" - -extern char **environ; /* environment pointer */ - -#define PTRSIZE sizeof(char *) - -PUBLIC int execl(name, arg0) -char *name; -char *arg0; -{ - return execve(name, &arg0, environ); -} - -PUBLIC int execle(name, argv) -char *name, *argv; -{ - char **p; - p = (char **) &argv; - while (*p++) /* null statement */ ; - return execve(name, &argv, *p); -} - -PUBLIC int execv(name, argv) -char *name, *argv[]; -{ - return execve(name, argv, environ); -} - - -PUBLIC int execve(name, argv, envp) -char *name; /* pointer to name of file to be executed */ -char *argv[]; /* pointer to argument array */ -char *envp[]; /* pointer to environment */ -{ - char stack[MAX_ISTACK_BYTES]; - char **argorg, **envorg, *hp, **ap, *p; - int i, nargs, nenvps, stackbytes, offset; - extern errno; - - /* Count the argument pointers and environment pointers. */ - nargs = 0; - nenvps = 0; - argorg = argv; - envorg = envp; - while (*argorg++ != NIL_PTR) nargs++; - while (*envorg++ != NIL_PTR) nenvps++; - - /* Prepare to set up the initial stack. */ - hp = &stack[(nargs + nenvps + 3) * PTRSIZE]; - if (hp + nargs + nenvps >= &stack[MAX_ISTACK_BYTES]) { - errno = E2BIG; - return(-1); - } - ap = (char **) stack; - *ap++ = (char *) nargs; - - /* Prepare the argument pointers and strings. */ - for (i = 0; i < nargs; i++) { - offset = hp - stack; - *ap++ = (char *) offset; - p = *argv++; - while (*p) { - *hp++ = *p++; - if (hp >= &stack[MAX_ISTACK_BYTES]) { - errno = E2BIG; - return(-1); - } - } - *hp++ = (char) 0; - } - *ap++ = NIL_PTR; - - /* Prepare the environment pointers and strings. */ - for (i = 0; i < nenvps; i++) { - offset = hp - stack; - *ap++ = (char *) offset; - p = *envp++; - while (*p) { - *hp++ = *p++; - if (hp >= &stack[MAX_ISTACK_BYTES]) { - errno = E2BIG; - return(-1); - } - } - *hp++ = (char) 0; - } - *ap++ = NIL_PTR; - stackbytes = ( ( (int)(hp - stack) + PTRSIZE - 1)/PTRSIZE) * PTRSIZE; - return callm1(MM_PROC_NR, EXEC, len(name), stackbytes, 0,name, stack,NIL_PTR); -} - - -PUBLIC execn(name) -char *name; /* pointer to file to be exec'd */ -{ -/* Special version used when there are no args and no environment. This call - * is principally used by INIT, to avoid having to allocate MAX_ISTACK_BYTES. - */ - - static char stack[3 * PTRSIZE]; - - return callm1(MM_PROC_NR, EXEC, len(name), sizeof(stack), 0, name, stack, NIL_PTR); -} diff --git a/mach/minix/libsys/fork.c b/mach/minix/libsys/fork.c deleted file mode 100644 index 7d5c0fc59..000000000 --- a/mach/minix/libsys/fork.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int fork() -{ - return callm1(MM, FORK, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/fstat.c b/mach/minix/libsys/fstat.c deleted file mode 100644 index 8fb6d6652..000000000 --- a/mach/minix/libsys/fstat.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "lib.h" - -PUBLIC int fstat(fd, buffer) -int fd; -char *buffer; -{ - int n; - n = callm1(FS, FSTAT, fd, 0, 0, buffer, NIL_PTR, NIL_PTR); - return(n); -} diff --git a/mach/minix/libsys/getegid.c b/mach/minix/libsys/getegid.c deleted file mode 100644 index e41669162..000000000 --- a/mach/minix/libsys/getegid.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC gid getegid() -{ - int k; - k = callm1(MM, GETGID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k < 0) return ( (gid) k); - return( (gid) M.m2_i1); -} diff --git a/mach/minix/libsys/geteuid.c b/mach/minix/libsys/geteuid.c deleted file mode 100644 index 172f3dfda..000000000 --- a/mach/minix/libsys/geteuid.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC uid geteuid() -{ - int k; - k = callm1(MM, GETUID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k < 0) return ( (uid) k); - return ((uid) M.m2_i1); -} diff --git a/mach/minix/libsys/getgid.c b/mach/minix/libsys/getgid.c deleted file mode 100644 index 78fc92ac0..000000000 --- a/mach/minix/libsys/getgid.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC gid getgid() -{ - int k; - k = callm1(MM, GETGID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - return( (gid) k); -} diff --git a/mach/minix/libsys/getpid.c b/mach/minix/libsys/getpid.c deleted file mode 100644 index 43ab9ddaa..000000000 --- a/mach/minix/libsys/getpid.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int getpid() -{ - return callm1(MM, GETPID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/getuid.c b/mach/minix/libsys/getuid.c deleted file mode 100644 index 44801a361..000000000 --- a/mach/minix/libsys/getuid.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC uid getuid() -{ - int k; - k = callm1(MM, GETUID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - return( (uid) k); -} diff --git a/mach/minix/libsys/gtty.c b/mach/minix/libsys/gtty.c deleted file mode 100644 index 8916d9b48..000000000 --- a/mach/minix/libsys/gtty.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -gtty(fd, argp) -int fd; -char *argp; -{ - return ioctl(fd, TIOCGETP, argp); -} - diff --git a/mach/minix/libsys/ioctl.c b/mach/minix/libsys/ioctl.c deleted file mode 100644 index fbd0658f4..000000000 --- a/mach/minix/libsys/ioctl.c +++ /dev/null @@ -1,68 +0,0 @@ -#include "lib.h" -#include -#include - -PUBLIC int ioctl(fd, request, u) -int fd; -int request; -union { - struct sgttyb *argp; - struct tchars *argt; -} u; - -{ - int n, ispeed, ospeed; - long erase, kill, intr, quit, xon, xoff, eof, brk, speed; - - M.TTY_REQUEST = request; - M.TTY_LINE = fd; - - switch(request) { - case TIOCSETP: - erase = u.argp->sg_erase & BYTE; - kill = u.argp->sg_kill & BYTE; - M.TTY_SPEK = (erase << 8) | kill; - M.TTY_FLAGS = u.argp->sg_flags; - M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed; - n = callx(FS, IOCTL); - return(n); - - case TIOCSETC: - intr = u.argt->t_intrc & BYTE; - quit = u.argt->t_quitc & BYTE; - xon = u.argt->t_startc & BYTE; - xoff = u.argt->t_stopc & BYTE; - eof = u.argt->t_eofc & BYTE; - brk = u.argt->t_brkc & BYTE; /* not used at the moment */ - M.TTY_SPEK = (intr<<24) | (quit<<16) | (xon<<8) | (xoff<<0); - M.TTY_FLAGS = (eof<<8) | (brk<<0); - n = callx(FS, IOCTL); - return(n); - - case TIOCGETP: - n = callx(FS, IOCTL); - u.argp->sg_erase = (M.TTY_SPEK >> 8) & BYTE; - u.argp->sg_kill = (M.TTY_SPEK >> 0) & BYTE; - u.argp->sg_flags = M.TTY_FLAGS & 0xFFFF; - speed = (M.TTY_FLAGS >> 16) & 0xFFFFL; - u.argp->sg_ispeed = speed & BYTE; - u.argp->sg_ospeed = (speed >> 8) & BYTE; - return(n); - - case TIOCGETC: - n = callx(FS, IOCTL); - u.argt->t_intrc = (M.TTY_SPEK >> 24) & BYTE; - u.argt->t_quitc = (M.TTY_SPEK >> 16) & BYTE; - u.argt->t_startc = (M.TTY_SPEK >> 8) & BYTE; - u.argt->t_stopc = (M.TTY_SPEK >> 0) & BYTE; - u.argt->t_eofc = (M.TTY_FLAGS >> 8) & BYTE; - u.argt->t_brkc = (M.TTY_FLAGS >> 8) & BYTE; - return(n); - - default: - n = -1; - errno = -(EINVAL); - return(n); - } -} - diff --git a/mach/minix/libsys/kill.c b/mach/minix/libsys/kill.c deleted file mode 100644 index db1065411..000000000 --- a/mach/minix/libsys/kill.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int kill(proc, sig) -int proc; /* which process is to be sent the signal */ -int sig; /* signal number */ -{ - return callm1(MM, KILL, proc, sig, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/lib.h b/mach/minix/libsys/lib.h deleted file mode 100644 index 32c25c789..000000000 --- a/mach/minix/libsys/lib.h +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include - -extern message M; - -#define MM 0 -#define FS 1 - -extern int callm1(), callm3(), callx(), len(); -extern int errno; -extern int begsig(); /* interrupts all vector here */ diff --git a/mach/minix/libsys/link.c b/mach/minix/libsys/link.c deleted file mode 100644 index 9daee3809..000000000 --- a/mach/minix/libsys/link.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int link(name, name2) -char *name, *name2; -{ - return callm1(FS, LINK, len(name), len(name2), 0, name, name2, NIL_PTR); -} diff --git a/mach/minix/libsys/lseek.c b/mach/minix/libsys/lseek.c deleted file mode 100644 index ffcf165d1..000000000 --- a/mach/minix/libsys/lseek.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "lib.h" - -PUBLIC long lseek(fd, offset, whence) -int fd; -long offset; -int whence; -{ - int k; - M.m2_i1 = fd; - M.m2_l1 = offset; - M.m2_i2 = whence; - k = callx(FS, LSEEK); - if (k != OK) return( (long) k); /* send itself failed */ - return(M.m2_l1); -} diff --git a/mach/minix/libsys/mknod.c b/mach/minix/libsys/mknod.c deleted file mode 100644 index 7dbfeca1e..000000000 --- a/mach/minix/libsys/mknod.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int mknod(name, mode, addr) -char *name; -int mode, addr; -{ - return callm1(FS, MKNOD, len(name), mode, addr, name, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/mktemp.c b/mach/minix/libsys/mktemp.c deleted file mode 100644 index e29e5c93b..000000000 --- a/mach/minix/libsys/mktemp.c +++ /dev/null @@ -1,20 +0,0 @@ -/* mktemp - make a name for a temporary file */ - -char *mktemp(template) -char *template; -{ - int pid, k; - char *p; - - pid = getpid(); /* get process id as semi-unique number */ - p = template; - while (*p++) ; /* find end of string */ - p--; /* backup to last character */ - - /* Replace XXXXXX at end of template with pid. */ - while (*--p == 'X') { - *p = '0' + (pid % 10); - pid = pid/10; - } - return(template); -} diff --git a/mach/minix/libsys/mount.c b/mach/minix/libsys/mount.c deleted file mode 100644 index 258276b4d..000000000 --- a/mach/minix/libsys/mount.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int mount(special, name, rwflag) -char *name, *special; -int rwflag; -{ - return callm1(FS, MOUNT, len(special), len(name), rwflag, special, name, NIL_PTR); -} diff --git a/mach/minix/libsys/open.c b/mach/minix/libsys/open.c deleted file mode 100644 index 228173d76..000000000 --- a/mach/minix/libsys/open.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int open(name, mode) -char* name; -int mode; -{ - return callm3(FS, OPEN, mode, name); -} diff --git a/mach/minix/libsys/pause.c b/mach/minix/libsys/pause.c deleted file mode 100644 index 2a0d1f698..000000000 --- a/mach/minix/libsys/pause.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int pause() -{ - return callm1(MM, PAUSE, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/pipe.c b/mach/minix/libsys/pipe.c deleted file mode 100644 index 05058808e..000000000 --- a/mach/minix/libsys/pipe.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "lib.h" - -PUBLIC int pipe(fild) -int fild[2]; -{ - int k; - k = callm1(FS, PIPE, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k >= 0) { - fild[0] = M.m1_i1; - fild[1] = M.m1_i2; - return(0); - } else - return(k); -} diff --git a/mach/minix/libsys/read.c b/mach/minix/libsys/read.c deleted file mode 100644 index 1619a4da9..000000000 --- a/mach/minix/libsys/read.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "lib.h" - -PUBLIC int read(fd, buffer, nbytes) -int fd; -char *buffer; -int nbytes; -{ - int n; - n = callm1(FS, READ, fd, nbytes, 0, buffer, NIL_PTR, NIL_PTR); - return(n); -} diff --git a/mach/minix/libsys/setgid.c b/mach/minix/libsys/setgid.c deleted file mode 100644 index 823e8788a..000000000 --- a/mach/minix/libsys/setgid.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int setgid(grp) -int grp; -{ - return callm1(MM, SETGID, grp, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/setuid.c b/mach/minix/libsys/setuid.c deleted file mode 100644 index c53e0e3c0..000000000 --- a/mach/minix/libsys/setuid.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int setuid(usr) -int usr; -{ - return callm1(MM, SETUID, usr, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/signal.c b/mach/minix/libsys/signal.c deleted file mode 100644 index 4c5167cb0..000000000 --- a/mach/minix/libsys/signal.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "lib.h" -#include - -int (*vectab[NSIG])(); /* array of functions to catch signals */ - -/* The definition of signal really should be - * PUBLIC int (*signal(signr, func))() - * but some compilers refuse to accept this, even though it is correct. - * The only thing to do if you are stuck with such a defective compiler is - * change it to - * PUBLIC int *signal(signr, func) - * and change ../h/signal.h accordingly. - */ - -PUBLIC int (*signal(signr, func))() -int signr; /* which signal is being set */ -int (*func)(); /* pointer to function that catches signal */ -{ - int r,(*old)(); - - old = vectab[signr - 1]; - vectab[signr - 1] = func; - M.m6_i1 = signr; - M.m6_f1 = ( (func == SIG_IGN || func == SIG_DFL) ? func : begsig); - r = callx(MM, SIGNAL); - if (r == 1) old = SIG_IGN; - return( (r < 0 ? (int (*)()) r : old) ); -} diff --git a/mach/minix/libsys/stat.c b/mach/minix/libsys/stat.c deleted file mode 100644 index ae7b446fd..000000000 --- a/mach/minix/libsys/stat.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "lib.h" - -PUBLIC int stat(name, buffer) -char *name; -char *buffer; -{ - int n; - n = callm1(FS, STAT, len(name), 0, 0, name, buffer, NIL_PTR); - return(n); -} diff --git a/mach/minix/libsys/stderr.c b/mach/minix/libsys/stderr.c deleted file mode 100644 index 7910f77ee..000000000 --- a/mach/minix/libsys/stderr.c +++ /dev/null @@ -1,8 +0,0 @@ -std_err(s) -char *s; -{ - char *p = s; - - while(*p != 0) p++; - write(2, s, (int)(p - s)); -} diff --git a/mach/minix/libsys/stime.c b/mach/minix/libsys/stime.c deleted file mode 100644 index 548ac37cf..000000000 --- a/mach/minix/libsys/stime.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int stime(top) -long *top; -{ - M.m2_l1 = *top; - return callx(FS, STIME); -} diff --git a/mach/minix/libsys/stty.c b/mach/minix/libsys/stty.c deleted file mode 100644 index 7dfe3db38..000000000 --- a/mach/minix/libsys/stty.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -stty(fd, argp) -int fd; -char *argp; -{ - return ioctl(fd, TIOCSETP, argp); -} - diff --git a/mach/minix/libsys/sync.c b/mach/minix/libsys/sync.c deleted file mode 100644 index 4592d28c9..000000000 --- a/mach/minix/libsys/sync.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int sync() -{ - return callm1(FS, SYNC, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/time.c b/mach/minix/libsys/time.c deleted file mode 100644 index e34e1f241..000000000 --- a/mach/minix/libsys/time.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "lib.h" - -PUBLIC long time(tp) -long *tp; -{ - int k; - long l; - k = callm1(FS, TIME, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (M.m_type < 0 || k != OK) {errno = -M.m_type; return(-1L);} - l = M.m2_l1; - if (tp != (long *) 0) *tp = l; - return(l); -} diff --git a/mach/minix/libsys/times.c b/mach/minix/libsys/times.c deleted file mode 100644 index 77515d696..000000000 --- a/mach/minix/libsys/times.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "lib.h" -#include -#include - -PUBLIC int times(buf) -struct tms *buf; -{ - int k; - k = callm1(FS, TIMES, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - buf->tms_utime = M.m4_l1; - buf->tms_stime = M.m4_l2; - buf->tms_cutime = M.m4_l3; - buf->tms_cstime = M.m4_l4; - return(k); -} diff --git a/mach/minix/libsys/trp.s b/mach/minix/libsys/trp.s deleted file mode 100644 index 1aac8b779..000000000 --- a/mach/minix/libsys/trp.s +++ /dev/null @@ -1,114 +0,0 @@ -.sect .text ; .sect .rom; .sect .data; .sect .bss -.define .trpdivz -.define .trpilin -.define .trpcase -.define .trprang -.define .trpset -.define .trpnofp -.define .trpheap -.define .trp -.define .stop - -.sect .text -.extern .trpdivz -.extern .trpilin -.extern .trpcase -.extern .trprang -.extern .trpset -.extern .trpnofp -.extern .trpheap -.extern .trp - -.trpdivz: -mov ax,6 -mov dx,.Mdivz -jmp .Trp -.trpilin: -mov ax,18 -mov dx,.Milin -jmp .Trp -.trpcase: -mov ax,20 -mov dx,.Mcase -jmp .Trp -.trprang: -mov ax,1 -mov dx,.Mrang -jmp .Trp -.trpset: -mov ax,2 -mov dx,.Mset -jmp .Trp -.trpnofp: -mov ax,18 -mov dx,.Mnofp -jmp .Trp -.trpheap: -mov ax,17 -mov dx,.Mheap -jmp .Trp - -.Trp: -xor bx,bx -.extern .trppc -xchg bx,(.trppc) -test bx,bx -jz 2f -push ax -call (bx) -pop ax -ret -2: -mov bx,22 -push bx -push dx -mov ax,2 -push ax -call _write -.stop: -call _exit - -.trp: -mov dx,ax -cmp dx,21 -jae 1f -sal dx,1 -mov bx,.Mtable -add bx,dx -mov bx,(bx) -test bx,bx -jz 1f -mov dx,bx -jmp 2f -1: -mov bx,.Mtrp+14 -mov cx,6 -mov dx,ax -1: -and dx,7 -add dx,'0' -movb (bx),dl -dec bx -sar dx,1 -sar dx,1 -sar dx,1 -loop 1b -mov dx,.Mtrp -2: -jmp .Trp - -.sect .rom -.Mtable: - .data2 0, .Mrang, .Mset, 0, 0, 0, .Mdivz, 0 - .data2 0, 0, 0, 0, 0, 0, 0, 0 - .data2 0, .Mheap, .Milin, .Milin, .Mcase - -.Mdivz: .asciz "Error: Division by 0 \n" -.Milin: .asciz "Illegal EM instruct'n\n" -.Mcase: .asciz "Err in EM case instr \n" -.Mrang: .asciz "Variable out of range\n" -.Mset: .asciz "Err in EM set instr \n" -.Mnofp: .asciz "Floating pt not impl.\n" -.Mheap: .asciz "Heap overflow \n" - -.Mtrp: .asciz "EM trap 0000000 octal\n" diff --git a/mach/minix/libsys/umask.c b/mach/minix/libsys/umask.c deleted file mode 100644 index caeb07541..000000000 --- a/mach/minix/libsys/umask.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int umask(complmode) -int complmode; -{ - return callm1(FS, UMASK, complmode, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minix/libsys/umount.c b/mach/minix/libsys/umount.c deleted file mode 100644 index d1fab6da7..000000000 --- a/mach/minix/libsys/umount.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int umount(name) -char* name; -{ - return callm3(FS, UMOUNT, 0, name); -} diff --git a/mach/minix/libsys/unlink.c b/mach/minix/libsys/unlink.c deleted file mode 100644 index 9c321ff21..000000000 --- a/mach/minix/libsys/unlink.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int unlink(name) -char *name; -{ - return callm3(FS, UNLINK, 0, name); -} diff --git a/mach/minix/libsys/utime.c b/mach/minix/libsys/utime.c deleted file mode 100644 index 0c9b4ef4b..000000000 --- a/mach/minix/libsys/utime.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "lib.h" - -PUBLIC int utime(name, timp) -char *name; -long timp[2]; -{ - M.m2_i1 = len(name); - M.m2_l1 = timp[0]; - M.m2_l2 = timp[1]; - M.m2_p1 = name; - return callx(FS, UTIME); -} diff --git a/mach/minix/libsys/wait.c b/mach/minix/libsys/wait.c deleted file mode 100644 index 2d8728fd2..000000000 --- a/mach/minix/libsys/wait.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "lib.h" - -PUBLIC int wait(status) -int *status; -{ - int k; - k = callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k >= 0 && status != 0) *status = M.m2_i1; - return(k); -} diff --git a/mach/minix/libsys/write.c b/mach/minix/libsys/write.c deleted file mode 100644 index e08826b0d..000000000 --- a/mach/minix/libsys/write.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int write(fd, buffer, nbytes) -char *buffer; -int nbytes; -{ - return callm1(FS, WRITE, fd, nbytes, 0, buffer, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/cv/Makefile b/mach/minixST/cv/Makefile deleted file mode 100644 index 5cfa97a6a..000000000 --- a/mach/minixST/cv/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - ../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/minixST/libsys/Makefile b/mach/minixST/libsys/Makefile deleted file mode 100644 index bf42930d4..000000000 --- a/mach/minixST/libsys/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -# $Header$ -MACH=minixST - -all: libsys_o.a end.o head_em.o - -install: all - ../../install libsys_o.a tail_mon - ../../install head_em.o head_em - ../../install end.o end_em - -cmp: all - -../../compare libsys_o.a tail_mon - -../../compare head_em.o head_em - -../../compare end.o end_em - - -end.o: end.s - $(MACH) -I../../../h -O -c end.s - -head_em.o: head_em.s - $(MACH) -I../../../h -O -c head_em.s - -libsys.a: libsys_s.a - ASAR=aal ; export ASAR ;\ - march . libsys.a - -libsys_o.a: libsys.a ../../../lib/m68k2/tail_em - mkdir X; cd X; aal x ../libsys.a; aal x ../../../../lib/m68k2/tail_em; aal rv ../libsys_o.a *.o - rm -rf X - -clean: - rm -f *.o libsys_o.a libsys.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libsys.a | pr -h `pwd`/libsys.a - @pr `pwd`/end.s diff --git a/mach/minixST/libsys/_mktemp.c b/mach/minixST/libsys/_mktemp.c deleted file mode 100644 index e655f9ce8..000000000 --- a/mach/minixST/libsys/_mktemp.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -/* mktemp - make a name for a temporary file */ -#include -#define mktemp _mktemp -#define getpid _getpid -#define access _access -#include - -PUBLIC char *mktemp(char *template) -{ - register int pid, k; - register char *p; - - pid = getpid(); /* get process id as semi-unique number */ - p = template; - while (*p) p++; /* find end of string */ - - /* Replace XXXXXX at end of template with pid. */ - while (*--p == 'X') { - *p = '0' + (pid % 10); - pid /= 10; - } - p++; - for (k = 'a'; k <= 'z'; k++) { - *p = k; - if (access(template, 0) < 0) { - return template; - } - } - return("/"); -} diff --git a/mach/minixST/libsys/access.c b/mach/minixST/libsys/access.c deleted file mode 100644 index 23a22dd38..000000000 --- a/mach/minixST/libsys/access.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC int access(name, mode) -char *name; -int mode; -{ - return callm3(FS, ACCESS, mode, name); - -} diff --git a/mach/minixST/libsys/alarm.c b/mach/minixST/libsys/alarm.c deleted file mode 100644 index 9be91a8df..000000000 --- a/mach/minixST/libsys/alarm.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int alarm(sec) -unsigned sec; -{ - return callm1(MM, ALARM, (int) sec, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/brk.c b/mach/minixST/libsys/brk.c deleted file mode 100644 index f6a037728..000000000 --- a/mach/minixST/libsys/brk.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "lib.h" - -extern char *brksize; - -PUBLIC char *brk(addr) -char *addr; -{ - int k; - - k = callm1(MM, BRK, 0, 0, 0, addr, NIL_PTR, NIL_PTR); - if (k == OK) { - brksize = M.m2_p1; - return(NIL_PTR); - } else { - return( (char*) -1 ); - } -} - - -PUBLIC char *sbrk(incr) -int incr; -{ - char *newsize, *oldsize; - - oldsize = brksize; - newsize = brksize + incr; - if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize) - return( (char *) -1); - if (brk(newsize) == 0) - return(oldsize); - else - return( (char *) -1 ); -} - diff --git a/mach/minixST/libsys/chdir.c b/mach/minixST/libsys/chdir.c deleted file mode 100644 index 357a979c9..000000000 --- a/mach/minixST/libsys/chdir.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int chdir(name) -char *name; -{ - return callm3(FS, CHDIR, 0, name); - -} diff --git a/mach/minixST/libsys/chmod.c b/mach/minixST/libsys/chmod.c deleted file mode 100644 index 7ae3edad1..000000000 --- a/mach/minixST/libsys/chmod.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC int chmod(name, mode) -char* name; -int mode; -{ - return callm3(FS, CHMOD, mode, name); - -} diff --git a/mach/minixST/libsys/chown.c b/mach/minixST/libsys/chown.c deleted file mode 100644 index 0846102c8..000000000 --- a/mach/minixST/libsys/chown.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int chown(name, owner, grp) -char *name; -int owner, grp; -{ - return callm1(FS, CHOWN, len(name), owner, grp, name, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/chroot.c b/mach/minixST/libsys/chroot.c deleted file mode 100644 index 520abaf1b..000000000 --- a/mach/minixST/libsys/chroot.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int chroot(name) -char* name; -{ - return callm3(FS, CHROOT, 0, name); - -} diff --git a/mach/minixST/libsys/close.c b/mach/minixST/libsys/close.c deleted file mode 100644 index 72698b0bf..000000000 --- a/mach/minixST/libsys/close.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int close(fd) -int fd; -{ - return callm1(FS, CLOSE, fd, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - -} diff --git a/mach/minixST/libsys/compmodule b/mach/minixST/libsys/compmodule deleted file mode 100755 index c02730390..000000000 --- a/mach/minixST/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if minixST -c -L -LIB $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/minixST/libsys/creat.c b/mach/minixST/libsys/creat.c deleted file mode 100644 index f9c13607f..000000000 --- a/mach/minixST/libsys/creat.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int creat(name, mode) -char* name; -int mode; -{ - return callm3(FS, CREAT, mode, name); -} diff --git a/mach/minixST/libsys/dup.c b/mach/minixST/libsys/dup.c deleted file mode 100644 index f8683ea90..000000000 --- a/mach/minixST/libsys/dup.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int dup(fd) -int fd; -{ - return callm1(FS, DUP, fd, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/dup2.c b/mach/minixST/libsys/dup2.c deleted file mode 100644 index 67e7c3da3..000000000 --- a/mach/minixST/libsys/dup2.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int dup2(fd, fd2) -int fd, fd2; -{ - return callm1(FS, DUP, fd+0100, fd2, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/end.s b/mach/minixST/libsys/end.s deleted file mode 100644 index f7462124e..000000000 --- a/mach/minixST/libsys/end.s +++ /dev/null @@ -1,16 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define endtext,enddata,endbss -.define _end,_etext,_edata - - .sect .text -endtext: -_etext: - .align 2 - .sect .data -enddata: -_edata: - .align 2 -.sect .endsect -_end: -endbss: - .align 2 diff --git a/mach/minixST/libsys/exec.c b/mach/minixST/libsys/exec.c deleted file mode 100644 index cb2be5520..000000000 --- a/mach/minixST/libsys/exec.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "lib.h" - -extern char **environ; /* environment pointer */ - -#define PTRSIZE sizeof(char *) - -PUBLIC int execl(name, arg0) -char *name; -char *arg0; -{ - return execve(name, &arg0, environ); -} - -PUBLIC int execle(name, argv) -char *name, *argv; -{ - char **p; - p = (char **) &argv; - while (*p++) /* null statement */ ; - return execve(name, &argv, *p); -} - -PUBLIC int execv(name, argv) -char *name, *argv[]; -{ - return execve(name, argv, environ); -} - - -PUBLIC int execve(name, argv, envp) -char *name; /* pointer to name of file to be executed */ -char *argv[]; /* pointer to argument array */ -char *envp[]; /* pointer to environment */ -{ - char stack[MAX_ISTACK_BYTES]; - char **argorg, **envorg, *hp, **ap, *p; - int i, nargs, nenvps, stackbytes, offset; - extern errno; - - /* Count the argument pointers and environment pointers. */ - nargs = 0; - nenvps = 0; - argorg = argv; - envorg = envp; - while (*argorg++ != NIL_PTR) nargs++; - while (*envorg++ != NIL_PTR) nenvps++; - - /* Prepare to set up the initial stack. */ - hp = &stack[(nargs + nenvps + 3) * PTRSIZE]; - if (hp + nargs + nenvps >= &stack[MAX_ISTACK_BYTES]) { - errno = E2BIG; - return(-1); - } - ap = (char **) stack; - *ap++ = (char *) nargs; - - /* Prepare the argument pointers and strings. */ - for (i = 0; i < nargs; i++) { - offset = hp - stack; - *ap++ = (char *) offset; - p = *argv++; - while (*p) { - *hp++ = *p++; - if (hp >= &stack[MAX_ISTACK_BYTES]) { - errno = E2BIG; - return(-1); - } - } - *hp++ = (char) 0; - } - *ap++ = NIL_PTR; - - /* Prepare the environment pointers and strings. */ - for (i = 0; i < nenvps; i++) { - offset = hp - stack; - *ap++ = (char *) offset; - p = *envp++; - while (*p) { - *hp++ = *p++; - if (hp >= &stack[MAX_ISTACK_BYTES]) { - errno = E2BIG; - return(-1); - } - } - *hp++ = (char) 0; - } - *ap++ = NIL_PTR; - stackbytes = ( ( (int)(hp - stack) + PTRSIZE - 1)/PTRSIZE) * PTRSIZE; - return callm1(MM_PROC_NR, EXEC, len(name), stackbytes, 0,name, stack,NIL_PTR); -} - - -PUBLIC execn(name) -char *name; /* pointer to file to be exec'd */ -{ -/* Special version used when there are no args and no environment. This call - * is principally used by INIT, to avoid having to allocate MAX_ISTACK_BYTES. - */ - - static char stack[3 * PTRSIZE]; - - return callm1(MM_PROC_NR, EXEC, len(name), sizeof(stack), 0, name, stack, NIL_PTR); -} diff --git a/mach/minixST/libsys/fork.c b/mach/minixST/libsys/fork.c deleted file mode 100644 index 7d5c0fc59..000000000 --- a/mach/minixST/libsys/fork.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int fork() -{ - return callm1(MM, FORK, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/fstat.c b/mach/minixST/libsys/fstat.c deleted file mode 100644 index 8fb6d6652..000000000 --- a/mach/minixST/libsys/fstat.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "lib.h" - -PUBLIC int fstat(fd, buffer) -int fd; -char *buffer; -{ - int n; - n = callm1(FS, FSTAT, fd, 0, 0, buffer, NIL_PTR, NIL_PTR); - return(n); -} diff --git a/mach/minixST/libsys/getegid.c b/mach/minixST/libsys/getegid.c deleted file mode 100644 index e41669162..000000000 --- a/mach/minixST/libsys/getegid.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC gid getegid() -{ - int k; - k = callm1(MM, GETGID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k < 0) return ( (gid) k); - return( (gid) M.m2_i1); -} diff --git a/mach/minixST/libsys/geteuid.c b/mach/minixST/libsys/geteuid.c deleted file mode 100644 index 172f3dfda..000000000 --- a/mach/minixST/libsys/geteuid.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "lib.h" - -PUBLIC uid geteuid() -{ - int k; - k = callm1(MM, GETUID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k < 0) return ( (uid) k); - return ((uid) M.m2_i1); -} diff --git a/mach/minixST/libsys/getgid.c b/mach/minixST/libsys/getgid.c deleted file mode 100644 index 78fc92ac0..000000000 --- a/mach/minixST/libsys/getgid.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC gid getgid() -{ - int k; - k = callm1(MM, GETGID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - return( (gid) k); -} diff --git a/mach/minixST/libsys/getpid.c b/mach/minixST/libsys/getpid.c deleted file mode 100644 index 43ab9ddaa..000000000 --- a/mach/minixST/libsys/getpid.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int getpid() -{ - return callm1(MM, GETPID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/getuid.c b/mach/minixST/libsys/getuid.c deleted file mode 100644 index 44801a361..000000000 --- a/mach/minixST/libsys/getuid.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC uid getuid() -{ - int k; - k = callm1(MM, GETUID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - return( (uid) k); -} diff --git a/mach/minixST/libsys/gtty.c b/mach/minixST/libsys/gtty.c deleted file mode 100644 index 8916d9b48..000000000 --- a/mach/minixST/libsys/gtty.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -gtty(fd, argp) -int fd; -char *argp; -{ - return ioctl(fd, TIOCGETP, argp); -} - diff --git a/mach/minixST/libsys/ioctl.c b/mach/minixST/libsys/ioctl.c deleted file mode 100644 index fbd0658f4..000000000 --- a/mach/minixST/libsys/ioctl.c +++ /dev/null @@ -1,68 +0,0 @@ -#include "lib.h" -#include -#include - -PUBLIC int ioctl(fd, request, u) -int fd; -int request; -union { - struct sgttyb *argp; - struct tchars *argt; -} u; - -{ - int n, ispeed, ospeed; - long erase, kill, intr, quit, xon, xoff, eof, brk, speed; - - M.TTY_REQUEST = request; - M.TTY_LINE = fd; - - switch(request) { - case TIOCSETP: - erase = u.argp->sg_erase & BYTE; - kill = u.argp->sg_kill & BYTE; - M.TTY_SPEK = (erase << 8) | kill; - M.TTY_FLAGS = u.argp->sg_flags; - M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed; - n = callx(FS, IOCTL); - return(n); - - case TIOCSETC: - intr = u.argt->t_intrc & BYTE; - quit = u.argt->t_quitc & BYTE; - xon = u.argt->t_startc & BYTE; - xoff = u.argt->t_stopc & BYTE; - eof = u.argt->t_eofc & BYTE; - brk = u.argt->t_brkc & BYTE; /* not used at the moment */ - M.TTY_SPEK = (intr<<24) | (quit<<16) | (xon<<8) | (xoff<<0); - M.TTY_FLAGS = (eof<<8) | (brk<<0); - n = callx(FS, IOCTL); - return(n); - - case TIOCGETP: - n = callx(FS, IOCTL); - u.argp->sg_erase = (M.TTY_SPEK >> 8) & BYTE; - u.argp->sg_kill = (M.TTY_SPEK >> 0) & BYTE; - u.argp->sg_flags = M.TTY_FLAGS & 0xFFFF; - speed = (M.TTY_FLAGS >> 16) & 0xFFFFL; - u.argp->sg_ispeed = speed & BYTE; - u.argp->sg_ospeed = (speed >> 8) & BYTE; - return(n); - - case TIOCGETC: - n = callx(FS, IOCTL); - u.argt->t_intrc = (M.TTY_SPEK >> 24) & BYTE; - u.argt->t_quitc = (M.TTY_SPEK >> 16) & BYTE; - u.argt->t_startc = (M.TTY_SPEK >> 8) & BYTE; - u.argt->t_stopc = (M.TTY_SPEK >> 0) & BYTE; - u.argt->t_eofc = (M.TTY_FLAGS >> 8) & BYTE; - u.argt->t_brkc = (M.TTY_FLAGS >> 8) & BYTE; - return(n); - - default: - n = -1; - errno = -(EINVAL); - return(n); - } -} - diff --git a/mach/minixST/libsys/kill.c b/mach/minixST/libsys/kill.c deleted file mode 100644 index db1065411..000000000 --- a/mach/minixST/libsys/kill.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int kill(proc, sig) -int proc; /* which process is to be sent the signal */ -int sig; /* signal number */ -{ - return callm1(MM, KILL, proc, sig, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/lib.h b/mach/minixST/libsys/lib.h deleted file mode 100644 index 32c25c789..000000000 --- a/mach/minixST/libsys/lib.h +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include - -extern message M; - -#define MM 0 -#define FS 1 - -extern int callm1(), callm3(), callx(), len(); -extern int errno; -extern int begsig(); /* interrupts all vector here */ diff --git a/mach/minixST/libsys/link.c b/mach/minixST/libsys/link.c deleted file mode 100644 index 9daee3809..000000000 --- a/mach/minixST/libsys/link.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int link(name, name2) -char *name, *name2; -{ - return callm1(FS, LINK, len(name), len(name2), 0, name, name2, NIL_PTR); -} diff --git a/mach/minixST/libsys/lseek.c b/mach/minixST/libsys/lseek.c deleted file mode 100644 index ffcf165d1..000000000 --- a/mach/minixST/libsys/lseek.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "lib.h" - -PUBLIC long lseek(fd, offset, whence) -int fd; -long offset; -int whence; -{ - int k; - M.m2_i1 = fd; - M.m2_l1 = offset; - M.m2_i2 = whence; - k = callx(FS, LSEEK); - if (k != OK) return( (long) k); /* send itself failed */ - return(M.m2_l1); -} diff --git a/mach/minixST/libsys/mknod.c b/mach/minixST/libsys/mknod.c deleted file mode 100644 index 7dbfeca1e..000000000 --- a/mach/minixST/libsys/mknod.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int mknod(name, mode, addr) -char *name; -int mode, addr; -{ - return callm1(FS, MKNOD, len(name), mode, addr, name, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/mktemp.c b/mach/minixST/libsys/mktemp.c deleted file mode 100644 index e29e5c93b..000000000 --- a/mach/minixST/libsys/mktemp.c +++ /dev/null @@ -1,20 +0,0 @@ -/* mktemp - make a name for a temporary file */ - -char *mktemp(template) -char *template; -{ - int pid, k; - char *p; - - pid = getpid(); /* get process id as semi-unique number */ - p = template; - while (*p++) ; /* find end of string */ - p--; /* backup to last character */ - - /* Replace XXXXXX at end of template with pid. */ - while (*--p == 'X') { - *p = '0' + (pid % 10); - pid = pid/10; - } - return(template); -} diff --git a/mach/minixST/libsys/mktemp.s b/mach/minixST/libsys/mktemp.s deleted file mode 100644 index cc5b48b1c..000000000 --- a/mach/minixST/libsys/mktemp.s +++ /dev/null @@ -1,5 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.sect .text -.define _mktemp -_mktemp: - jmp __mktemp diff --git a/mach/minixST/libsys/mount.c b/mach/minixST/libsys/mount.c deleted file mode 100644 index 258276b4d..000000000 --- a/mach/minixST/libsys/mount.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int mount(special, name, rwflag) -char *name, *special; -int rwflag; -{ - return callm1(FS, MOUNT, len(special), len(name), rwflag, special, name, NIL_PTR); -} diff --git a/mach/minixST/libsys/open.c b/mach/minixST/libsys/open.c deleted file mode 100644 index 228173d76..000000000 --- a/mach/minixST/libsys/open.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int open(name, mode) -char* name; -int mode; -{ - return callm3(FS, OPEN, mode, name); -} diff --git a/mach/minixST/libsys/pause.c b/mach/minixST/libsys/pause.c deleted file mode 100644 index 2a0d1f698..000000000 --- a/mach/minixST/libsys/pause.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int pause() -{ - return callm1(MM, PAUSE, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/pipe.c b/mach/minixST/libsys/pipe.c deleted file mode 100644 index 05058808e..000000000 --- a/mach/minixST/libsys/pipe.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "lib.h" - -PUBLIC int pipe(fild) -int fild[2]; -{ - int k; - k = callm1(FS, PIPE, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k >= 0) { - fild[0] = M.m1_i1; - fild[1] = M.m1_i2; - return(0); - } else - return(k); -} diff --git a/mach/minixST/libsys/read.c b/mach/minixST/libsys/read.c deleted file mode 100644 index 1619a4da9..000000000 --- a/mach/minixST/libsys/read.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "lib.h" - -PUBLIC int read(fd, buffer, nbytes) -int fd; -char *buffer; -int nbytes; -{ - int n; - n = callm1(FS, READ, fd, nbytes, 0, buffer, NIL_PTR, NIL_PTR); - return(n); -} diff --git a/mach/minixST/libsys/setgid.c b/mach/minixST/libsys/setgid.c deleted file mode 100644 index 823e8788a..000000000 --- a/mach/minixST/libsys/setgid.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int setgid(grp) -int grp; -{ - return callm1(MM, SETGID, grp, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/setuid.c b/mach/minixST/libsys/setuid.c deleted file mode 100644 index c53e0e3c0..000000000 --- a/mach/minixST/libsys/setuid.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int setuid(usr) -int usr; -{ - return callm1(MM, SETUID, usr, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/signal.c b/mach/minixST/libsys/signal.c deleted file mode 100644 index 4c5167cb0..000000000 --- a/mach/minixST/libsys/signal.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "lib.h" -#include - -int (*vectab[NSIG])(); /* array of functions to catch signals */ - -/* The definition of signal really should be - * PUBLIC int (*signal(signr, func))() - * but some compilers refuse to accept this, even though it is correct. - * The only thing to do if you are stuck with such a defective compiler is - * change it to - * PUBLIC int *signal(signr, func) - * and change ../h/signal.h accordingly. - */ - -PUBLIC int (*signal(signr, func))() -int signr; /* which signal is being set */ -int (*func)(); /* pointer to function that catches signal */ -{ - int r,(*old)(); - - old = vectab[signr - 1]; - vectab[signr - 1] = func; - M.m6_i1 = signr; - M.m6_f1 = ( (func == SIG_IGN || func == SIG_DFL) ? func : begsig); - r = callx(MM, SIGNAL); - if (r == 1) old = SIG_IGN; - return( (r < 0 ? (int (*)()) r : old) ); -} diff --git a/mach/minixST/libsys/stat.c b/mach/minixST/libsys/stat.c deleted file mode 100644 index ae7b446fd..000000000 --- a/mach/minixST/libsys/stat.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "lib.h" - -PUBLIC int stat(name, buffer) -char *name; -char *buffer; -{ - int n; - n = callm1(FS, STAT, len(name), 0, 0, name, buffer, NIL_PTR); - return(n); -} diff --git a/mach/minixST/libsys/stderr.c b/mach/minixST/libsys/stderr.c deleted file mode 100644 index 7910f77ee..000000000 --- a/mach/minixST/libsys/stderr.c +++ /dev/null @@ -1,8 +0,0 @@ -std_err(s) -char *s; -{ - char *p = s; - - while(*p != 0) p++; - write(2, s, (int)(p - s)); -} diff --git a/mach/minixST/libsys/stime.c b/mach/minixST/libsys/stime.c deleted file mode 100644 index 548ac37cf..000000000 --- a/mach/minixST/libsys/stime.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int stime(top) -long *top; -{ - M.m2_l1 = *top; - return callx(FS, STIME); -} diff --git a/mach/minixST/libsys/stty.c b/mach/minixST/libsys/stty.c deleted file mode 100644 index 7dfe3db38..000000000 --- a/mach/minixST/libsys/stty.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -stty(fd, argp) -int fd; -char *argp; -{ - return ioctl(fd, TIOCSETP, argp); -} - diff --git a/mach/minixST/libsys/sync.c b/mach/minixST/libsys/sync.c deleted file mode 100644 index 4592d28c9..000000000 --- a/mach/minixST/libsys/sync.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib.h" - -PUBLIC int sync() -{ - return callm1(FS, SYNC, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/time.c b/mach/minixST/libsys/time.c deleted file mode 100644 index e34e1f241..000000000 --- a/mach/minixST/libsys/time.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "lib.h" - -PUBLIC long time(tp) -long *tp; -{ - int k; - long l; - k = callm1(FS, TIME, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (M.m_type < 0 || k != OK) {errno = -M.m_type; return(-1L);} - l = M.m2_l1; - if (tp != (long *) 0) *tp = l; - return(l); -} diff --git a/mach/minixST/libsys/times.c b/mach/minixST/libsys/times.c deleted file mode 100644 index 77515d696..000000000 --- a/mach/minixST/libsys/times.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "lib.h" -#include -#include - -PUBLIC int times(buf) -struct tms *buf; -{ - int k; - k = callm1(FS, TIMES, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - buf->tms_utime = M.m4_l1; - buf->tms_stime = M.m4_l2; - buf->tms_cutime = M.m4_l3; - buf->tms_cstime = M.m4_l4; - return(k); -} diff --git a/mach/minixST/libsys/umask.c b/mach/minixST/libsys/umask.c deleted file mode 100644 index caeb07541..000000000 --- a/mach/minixST/libsys/umask.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int umask(complmode) -int complmode; -{ - return callm1(FS, UMASK, complmode, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); -} diff --git a/mach/minixST/libsys/umount.c b/mach/minixST/libsys/umount.c deleted file mode 100644 index d1fab6da7..000000000 --- a/mach/minixST/libsys/umount.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int umount(name) -char* name; -{ - return callm3(FS, UMOUNT, 0, name); -} diff --git a/mach/minixST/libsys/unlink.c b/mach/minixST/libsys/unlink.c deleted file mode 100644 index 9c321ff21..000000000 --- a/mach/minixST/libsys/unlink.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib.h" - -PUBLIC int unlink(name) -char *name; -{ - return callm3(FS, UNLINK, 0, name); -} diff --git a/mach/minixST/libsys/utime.c b/mach/minixST/libsys/utime.c deleted file mode 100644 index 0c9b4ef4b..000000000 --- a/mach/minixST/libsys/utime.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "lib.h" - -PUBLIC int utime(name, timp) -char *name; -long timp[2]; -{ - M.m2_i1 = len(name); - M.m2_l1 = timp[0]; - M.m2_l2 = timp[1]; - M.m2_p1 = name; - return callx(FS, UTIME); -} diff --git a/mach/minixST/libsys/wait.c b/mach/minixST/libsys/wait.c deleted file mode 100644 index 2d8728fd2..000000000 --- a/mach/minixST/libsys/wait.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "lib.h" - -PUBLIC int wait(status) -int *status; -{ - int k; - k = callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR); - if (k >= 0 && status != 0) *status = M.m2_i1; - return(k); -} diff --git a/mach/minixST/libsys/write.c b/mach/minixST/libsys/write.c deleted file mode 100644 index e08826b0d..000000000 --- a/mach/minixST/libsys/write.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib.h" - -PUBLIC int write(fd, buffer, nbytes) -char *buffer; -int nbytes; -{ - return callm1(FS, WRITE, fd, nbytes, 0, buffer, NIL_PTR, NIL_PTR); -} diff --git a/mach/moon3/ncg/Makefile b/mach/moon3/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/moon3/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/moon3/ncg/README b/mach/moon3/ncg/README deleted file mode 100644 index 1849c66e5..000000000 --- a/mach/moon3/ncg/README +++ /dev/null @@ -1,11 +0,0 @@ -The file 'table' in this directory contains a back end table for the -MC68020 processor as well as one for the MC68000. Both tables use 2 or 4 bytes -for words and 4 bytes for pointers. The table must be preprocessed first -by the C preprocessor. -The file "whichone.h" specifies which code generator is generated: -it #defines either TBL68000 or TBL86020, and it defines WORD_SIZE to either -2 or 4. -The m68k4(TBL68000) cg can very well be used for the MC68010 processor, -for it makes rather efficient use of the 68010 loop mode. - -The mach.[ch] files are also suitable for both the m68020 and the m68k[24]. diff --git a/mach/moon3/ncg/instrmacs.h b/mach/moon3/ncg/instrmacs.h deleted file mode 100644 index b3d2b1649..000000000 --- a/mach/moon3/ncg/instrmacs.h +++ /dev/null @@ -1,144 +0,0 @@ -#if WORD_SIZE==2 -#define LLP ldl -#define LEP lde -#define LFP ldf /* load offsetted pointer */ -#define SLP sdl -#define SEP sde -#define SFP sdf /* store offsetted pointer */ - -#define ABS_off_int ABS_off2 -#define ABS_indoff_int ABS_indoff2 -#define ABSIND_off_int ABSIND_off2 -#define INDOFF_off_int INDOFF_off2 -#define OFF_off_int OFF_off2 -#define OFF_indoff_int OFF_indoff2 -#define abs_index_int abs_index2 -#define absolute_int absolute2 -#define any_int any2 -#define conreg_int conreg2 -#define data_int data2 -#define datalt_int datalt2 -#define dreg_int dreg2 -#define imm_cmp_int imm_cmp2 -#define immediate_int immediate2 -#define indirect_int indirect2 -#define index_off_int index_off2 -#define offsetted_int offsetted2 -#define post_inc_int post_inc2 -#define pre_dec_int pre_dec2 -#define store_int any2 -#define test_set_int test_set2 - -#define add_i add_w -#define ADD_I "add.w" -#define and_i and_w -#define AND_I "and.w" -#define asl_i asl_w -#define ASL_I "asl.w" -#define asr_i asr_w -#define ASR_I "asr.w" -#define clr_i clr_w -#define CLR_I "clr.w" -#define cmp_i cmp_w -#define cmp2_i cmp2_w -#define DEC "sub.w #1," -#define DIVS_I "divs.w" -#define DIVU_I "divu.w" -#define eor_i eor_w -#define EOR_I "eor.w" -#define INC "add.w #1," -#define lsr_i lsr_w -#define LSR_I "lsr.w" -#define move_i move_w -#define MOVE_I "move.w" -#define muls_i muls_w -#define MULS_I "muls.w" -#define mulu_i mulu_w -#define MULU_I "mulu.w" -#define neg_i neg_w -#define NEG_I "neg.w" -#define not_i not_w -#define NOT_I "not.w" -#define or_i or_w -#define OR_I "or.w" -#define rol_i rol_w -#define ROL_I "rol.w" -#define ror_i ror_w -#define ROR_I "ror.w" -#define sub_i sub_w -#define SUB_I "sub.w" -#define tst_i tst_w - -#else - -#define LLP lol -#define LEP loe -#define LFP lof /* load offsetted pointer */ -#define SLP stl -#define SEP ste -#define SFP stf /* store offsetted pointer */ - -#define ABS_off_int ABS_off4 -#define ABS_indoff_int ABS_indoff4 -#define ABSIND_off_int ABSIND_off4 -#define INDOFF_off_int INDOFF_off4 -#define OFF_off_int OFF_off4 -#define OFF_indoff_int OFF_indoff4 -#define abs_index_int abs_index4 -#define absolute_int absolute4 -#define any_int any4 -#define conreg_int conreg4 -#define data_int data4 -#define datalt_int datalt4 -#define dreg_int dreg4 -#define imm_cmp_int imm_cmp4 -#define immediate_int immediate4 -#define indirect_int indirect4 -#define index_off_int index_off4 -#define offsetted_int offsetted4 -#define post_inc_int post_inc4 -#define pre_dec_int pre_dec4 -#define store_int store4 -#define test_set_int test_set4 - -#define add_i add_l -#define ADD_I "add.l" -#define and_i and_l -#define AND_I "and.l" -#define asl_i asl_l -#define ASL_I "asl.l" -#define asr_i asr_l -#define ASR_I "asr.l" -#define clr_i clr_l -#define CLR_I "clr.l" -#define cmp_i cmp_l -#define cmp2_i cmp2_l -#define DEC "sub.l #1," -#define DIVS_I "divs.l" -#define DIVU_I "divu.l" -#define eor_i eor_l -#define EOR_I "eor.l" -#define INC "add.l #1," -#define lsr_i lsr_l -#define LSR_I "lsr.l" -#define move_i move_l -#define MOVE_I "move.l" -#define muls_i muls_l -#define MULS_I "muls.l" -#define mulu_i mulu_l -#define MULU_I "mulu.l" -#define neg_i neg_l -#define NEG_I "neg.l" -#define not_i not_l -#define NOT_I "not.l" -#define or_i or_l -#define OR_I "or.l" -#define rol_i rol_l -#define ROL_I "rol.l" -#define ror_i ror_l -#define ROR_I "ror.l" -#define sub_i sub_l -#define SUB_I "sub.l" -#define tst_i tst_l - -#endif diff --git a/mach/moon3/ncg/mach.c b/mach/moon3/ncg/mach.c deleted file mode 100644 index 6759772f7..000000000 --- a/mach/moon3/ncg/mach.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - */ - -/* - * machine dependent back end routines for the Motorola 68000, 68010 or 68020 - */ - -#include - -#if TBL68020 -#define SYNTAX_68020 1 -#endif - -#include - -con_part(sz,w) register sz; word w; { - - while (part_size % sz) - part_size++; - if (part_size == TEM_WSIZE) - part_flush(); - if (sz == 1) { - w &= 0xFF; -#if WORD_SIZE==4 - w <<= 8*(3-part_size); - part_word |= w; - } else if (sz == 2) { - w &= 0xFFFF; -#endif - if (part_size == 0) { - /* Shift 8 for m68k2, 16 otherwise */ - w <<= 4 * TEM_WSIZE; - } - part_word |= w; - } else { - assert(sz == TEM_WSIZE); - part_word = w; - } - part_size += sz; -} - -con_mult(sz) word sz; { - - if (sz != 4) - fatal("bad icon/ucon size"); - fprintf(codefile,".data4 %s\n",str); -} - -#define IEEEFLOAT -#define CODE_GENERATOR -#define FL_MSL_AT_LOW_ADDRESS 1 -#define FL_MSW_AT_LOW_ADDRESS 1 -#define FL_MSB_AT_LOW_ADDRESS 1 -#include - -regscore(off,size,typ,score,totyp) - long off; -{ - if (score == 0) return -1; - switch(typ) { - case reg_float: - return -1; - case reg_pointer: - if (size != 4 || totyp != reg_pointer) return -1; - score += (score >> 1); - break; - case reg_loop: - score += 5; - /* fall through .. */ - case reg_any: - if (size != TEM_WSIZE || totyp == reg_pointer) return -1; - break; - } - if (off >= 0) { - /* parameters must be initialised with an instruction - * like "move.l 4(a6),d0", which costs 2 words. - */ - score -= 2; - } - score--; /* save/restore */ - return score; -} -struct regsav_t { - char *rs_reg; /* e.g. "a3" or "d5" */ - long rs_off; /* offset of variable */ - int rs_size; /* 2 or 4 bytes */ -} regsav[9]; - - -int regnr; - -i_regsave() -{ - regnr = 0; -} - -full nlocals; - -regreturn() -{ - register struct regsav_t *p; - - if (regnr > 1) { -#ifdef SYNTAX_68020 - fprintf(codefile,"movem.l (-%ld,a6),", nlocals); -#else - fprintf(codefile,"movem.l -%ld(a6),", nlocals); -#endif - for (p = regsav; ;) { - fputs(p->rs_reg, codefile); - if (++p == ®sav[regnr]) break; - putc('/',codefile); - } - putc('\n',codefile); - } else if (regnr == 1) { - p = regsav; -#ifdef SYNTAX_68020 - fprintf(codefile,"move.l (-%ld,a6),%s\n",nlocals, p->rs_reg); -#else - fprintf(codefile,"move.l -%ld(a6),%s\n",nlocals, p->rs_reg); -#endif - } - fputs("unlk a6\nrts\n", codefile); -} - -f_regsave() -{ - register struct regsav_t *p; - - nlocals += regnr*4; -#ifdef TBL68020 - fprintf(codefile,"link\ta6,#-%ld\n",nlocals); -#else - if (nlocals > 32768) { - fprintf(codefile, "move.l a6,-(sp)\nmove.l sp,a6\nsub #%ld,sp\n", nlocals); - } - else fprintf(codefile,"link\ta6,#-%ld\n",nlocals); -#endif -#ifndef NOSTACKTEST - fprintf(codefile, "tst.b %s\n", -#ifdef SYNTAX_68020 - "(-40, sp)" -#else - "-40(sp)" -#endif - ); -#endif - if (regnr > 1) { - fputs("movem.l ", codefile); - for (p = regsav; ;) { - fputs(p->rs_reg, codefile); - if (++p == ®sav[regnr]) break; - putc('/',codefile); - } - fputs(",(sp)\n", codefile); - } else if (regnr == 1) { - p = regsav; - fprintf(codefile,"move.l %s,(sp)\n",p->rs_reg); - } - /* initialise register-parameters */ - for (p = regsav; p < ®sav[regnr]; p++) { - if (p->rs_off >= 0) { -#ifdef SYNTAX_68020 - fprintf(codefile,"move.%c (%ld,a6),%s\n", -#else - fprintf(codefile,"move.%c %ld(a6),%s\n", -#endif - (p->rs_size == 4 ? 'l' : 'w'), - p->rs_off, - p->rs_reg); - } - } -} - -regsave(s,off,size) - char *s; - long off; -{ - assert (regnr < 9); - regsav[regnr].rs_reg = s; - regsav[regnr].rs_off = off; - regsav[regnr++].rs_size = size; - fprintf(codefile, "!Local %ld into %s\n",off,s); -} - -prolog(n) full n; { - - nlocals = n; -} - -#ifdef MACH_OPTIONS -static int gdb_flag = 0; - -mach_option(s) - char *s; -{ - if (! strcmp(s, "-gdb")) { - gdb_flag = 1; - } - else { - error("Unknown flag %s", s); - } -} -#endif /* MACH_OPTIONS */ - -mes(type) word type ; { - int argt, a1, a2 ; - - switch ( (int)type ) { - case ms_ext : - for (;;) { - switch ( argt=getarg( - ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) { - case sp_cend : - return ; - default: - strarg(argt) ; - fprintf(codefile,".define %s\n",argstr) ; - break ; - } - } - case ms_stb: - argt = getarg(str_ptyp | cst_ptyp); - if (argt == sp_cstx) - fputs(".symb \"\", ", codefile); - else { - fprintf(codefile, ".symb \"%s\", ", str); - argt = getarg(cst_ptyp); - } - a1 = argval; - argt = getarg(cst_ptyp); - a2 = argval; - argt = getarg(cst_ptyp|nof_ptyp|sof_ptyp|ilb_ptyp|pro_ptyp); -#ifdef MACH_OPTIONS - if (gdb_flag) { - if (a1 == N_PSYM) { - /* Change offset from AB into offset from - the frame pointer. - */ - argval += 8; - } - } -#endif - fprintf(codefile, "%s, 0x%x, %d\n", strarg(argt), a1, a2); - argt = getarg(end_ptyp); - break; - case ms_std: - argt = getarg(str_ptyp | cst_ptyp); - if (argt == sp_cstx) - str[0] = '\0'; - else { - argt = getarg(cst_ptyp); - } - swtxt(); - if (argval == N_SLINE -#ifdef MACH_OPTIONS - && ! gdb_flag -#endif - ) { -#ifdef SYNTAX_68020 - fputs("jsr (___u_LiB)\n", codefile); -#else - fputs("jsr ___u_LiB\n", codefile); -#endif - cleanregs(); /* debugger might change variables */ - } - fprintf(codefile, ".symd \"%s\", 0x%x,", str, (int) argval); - argt = getarg(cst_ptyp); - fprintf(codefile, "%d\n", (int) argval); - argt = getarg(end_ptyp); - break; - default : - while ( getarg(any_ptyp) != sp_cend ) ; - break ; - } -} - - -char *segname[] = { - ".sect .text", /* SEGTXT */ - ".sect .data", /* SEGCON */ - ".sect .rom", /* SEGROM */ - ".sect .bss" /* SEGBSS */ -}; diff --git a/mach/moon3/ncg/mach.h b/mach/moon3/ncg/mach.h deleted file mode 100644 index 647a04322..000000000 --- a/mach/moon3/ncg/mach.h +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include - -#ifndef TBL68020 -#ifndef TBL68000 -Something is very wrong here. You must specify the machine: either -TBL68000 or TBL68020, in the file whichone.h, then REMOVE tables.c -and then run "make" again -#endif -#endif -#if WORD_SIZE!=2 && WORD_SIZE!=4 -You must specify the appropriate word size, then REMOVE tables.c -#endif - -#define ex_ap(y) fprintf(codefile,".extern %s\n",y) -#define in_ap(y) /* nothing */ - -#define newilb(x) fprintf(codefile,"%s:\n",x) -#define newdlb(x) fprintf(codefile,"%s:\n",x) -#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y) -#define newlbss(l,x) fprintf(codefile,".comm %s,%ld\n",l,x); - -#define pop_fmt "(sp)+" -#define cst_fmt "%ld" -#define off_fmt "%ld" -#define ilb_fmt "I%x_%x" -#define dlb_fmt "I_%d" -#define hol_fmt "hol%d" - -#define hol_off "%ld+hol%d" - -#if WORD_SIZE==2 -#define con_cst(x) fprintf(codefile,".data2\t%ld\n",x) -#else -#define con_cst(x) fprintf(codefile,".data4\t%ld\n",x) -#endif -#define con_ilb(x) fprintf(codefile,".data4\t%s\n",x) -#define con_dlb(x) fprintf(codefile,".data4\t%s\n",x) - -#define modhead ".sect .text\n.sect .rom\n.sect .data\n.sect .bss\n" - -#define fmt_id(sf,st) sprintf(st,"_%s",sf) - -#define BSS_INIT 0 -#define MACH_OPTIONS diff --git a/mach/moon3/ncg/table b/mach/moon3/ncg/table deleted file mode 100644 index a53b6bcec..000000000 --- a/mach/moon3/ncg/table +++ /dev/null @@ -1,6942 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ - -rscid = "$Id$" - - /******************************** - * * - * 68000, 68010 and 68020 * - * back end table * - * * - ********************************/ - -#include - -#if TBL68881 && ! TBL68020 -Something very wrong here! -#endif -#if WORD_SIZE!=2 && WORD_SIZE!=4 -Something very wrong here! -#endif - -#if TBL68020 -#define SYNTAX_68020 1 -#endif - -/* #define FANCY_MODES 1 -/* On the M68020, there are some real fancy addressing modes. - Their use makes the code a bit shorter, but also much slower. - The FANCY_MODES #define enables the use of these addressing - modes. -*/ - -#define small(x) ((x)>=1 && (x)<=8) -#define directadd(x) (small(x) || (x)>128) -#define directsub(x) (directadd(0-x)) -#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8) -#define low8(x) ((x) & 0377) -#define low16(x) ((x) & 0177777) -#define in_1(x) sfit(x,8) -#define in_2(x) sfit(x,16) - - -EM_WSIZE = WORD_SIZE -EM_PSIZE = 4 -EM_BSIZE = 8 - -SL = 8 - -TIMEFACTOR = 1/2 - - -PROPERTIES - -D_REG /* data registers */ -A_REG(4) /* address registers */ -DD_REG /* allocatable D_REG, may not be a register variable */ -AA_REG(4) /* allocatable A_REG, may not be a register variable */ -RD_REG /* data register, register var */ -RA_REG(4) /* address register, register var */ -#if WORD_SIZE==2 -D_REG4(4) /* data register, 4 bytes */ -DD_REG4(4) /* allocatable D_REG, 4 bytes */ -#else -#define D_REG4 D_REG -#define DD_REG4 DD_REG -#endif -#if TBL68881 -FS_REG(4) /* floating point register */ -FD_REG(8) /* double floating point register */ -#endif - - - -REGISTERS - -d0, d1, d2 :D_REG, DD_REG. -d3, d4, d5, d6, d7 :D_REG, RD_REG regvar. -#if WORD_SIZE==2 -dl0("d0")=d0, dl1("d1")=d1, dl2("d2")=d2 :D_REG4, DD_REG4. -#else -#define dl0 d0 -#define dl1 d1 -#define dl2 d2 -#endif -a0, a1 :A_REG, AA_REG. -a2, a3, a4, a5 :A_REG, RA_REG regvar(reg_pointer). -lb ("a6"), sp :A_REG. /* localbase and stack pointer */ -#if TBL68881 -F0 ("fp0"), F1 ("fp1"), F2 ("fp2"), F3 ("fp3"), F4 ("fp4"), F5 ("fp5"), -F6 ("fp6"), F7 ("fp7") :FS_REG. -fp0=F0,fp1=F1,fp2=F2,fp3=F3,fp4=F4,fp5=F5,fp6=F6,fp7=F7 - :FD_REG. -#endif - - - -TOKENS - - /* Not all addressing modes available on the MC68020 are used in this - * table. E.g (Dn), data register indirect is not used. Compared to - * (An), address register indirect, (Dn) requires two more bytes and - * several more clock cycles. Using (Dn) is even more expensive in - * time than first moving Dn to an address register An, and then using - * (An). For this kind of reasons several addressing modes are - * not used in this table. - * - * Cost in bytes may sometimes be incorrect. Several effective addresses - * use displacements that can occupy either 2 or 4 bytes. These are not - * considered different TOKENS in this table. - * - * Data registers are the only registers used as index registers in this - * table; address registers are only used to hold addresses. - * - * For the m68k2 and m68k4 table: the MC68000 and MC68010 have two - * modes that use displacements (offsets) of limited size: - * - offset(A_REG, Index_reg), where offset is only 8 bits, and - * - offset(A_REG), where offset can only be 16 bits. - * To make sure that no output is given with offsets too large, two - * extra tokens are declared: t_regAregXcon and t_regAcon. These are - * used as addresses to these modes. Whenever the displacements become - * too large, they are transformed into different tokens. - * - * Sometimes some TOKENS are used with displacements (offsets) of 0. - * It would have been possible to provide separate TOKENS for these, in - * case the assembler doesn't handle zero offsets optimally. This - * however would mean a very large amount of extra TOKENS and SETS for - * a very small profit in code bytes, so we won't do that. - * - * To prevent the TOKENS list from getting too unreadable, #ifdefs are - * used to form three parts: - * (i) the common part; - * (ii) the m68k2 and m68k4 part; - * (iii) the m68020 part; - */ - - /* Part (i) */ -zero_const = {INT num;} WORD_SIZE cost(0,0) "#" num . -small_const = {INT num;} WORD_SIZE cost(0,0) "#" num . -bconst = {INT num;} WORD_SIZE cost(0,0) "#" num . -const = {INT num;} WORD_SIZE cost(4,4) "#" num . -#if WORD_SIZE==2 -/* ??? "string+const */ -zero_const4 = {INT num;} 4 cost(0,0) "#" num . -small_const4 = {INT num;} 4 cost(0,0) "#" num . -bconst4 = {INT num;} 4 cost(0,0) "#" num . -const4 = {ADDR num;} 4 cost(4,4) "#" num . -#endif -indirect4 = {A_REG reg;} 4 cost(0,4) "(" reg ")" . -post_inc4 = {A_REG reg;} 4 cost(0,4) "(" reg ")+" . -pre_dec4 = {A_REG reg;} 4 cost(0,5) "-(" reg ")" . -dreg4 = {D_REG4 reg;} 4 cost(0,0) reg . -areg = {A_REG reg;} 4 cost(0,0) reg . -dreg2 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -indirect2 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")" . -post_inc2 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")+" . -pre_dec2 = {A_REG reg;} WORD_SIZE cost(0,5) "-(" reg ")" . -dreg1 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -indirect1 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")" . -post_inc1 = {A_REG reg;} WORD_SIZE cost(0,4) "(" reg ")+" . -pre_dec1 = {A_REG reg;} WORD_SIZE cost(0,5) "-(" reg ")" . - -ext_addr = {ADDR bd;} 4 cost(4,5) "#" bd . -llabel = {ADDR bd;} 4 cost(2,0) bd . -slabel = {ADDR bd;} 4 cost(0,0) bd . - -/* check this out */ -extend1 = {D_REG reg;} WORD_SIZE cost(0,0) reg . -#if WORD_SIZE==2 -extend1_4 = {D_REG4 reg;} 4 cost(0,0) reg . -#else -#define extend1_4 extend1 -#endif -extend2 = {D_REG4 reg;} 4 cost(0,0) reg . - -#ifndef SYNTAX_68020 - /* Part (ii) in m68k2/4 syntax */ -absolute4 = {ADDR bd;} 4 cost(4,8) bd . -offsetted4 = {A_REG reg; INT bd;} 4 cost(2,6) bd "(" reg ")" . -index_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,7) - bd "(" reg "," xreg ".l)" . -absolute2 = {ADDR bd;} WORD_SIZE cost(4,6) bd . -offsetted2 = {A_REG reg; INT bd;} WORD_SIZE cost(2,4) bd "(" reg ")" . -index_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(2,5) - bd "(" reg "," xreg ".l)" . -absolute1 = {ADDR bd;} WORD_SIZE cost(4,6) bd . -offsetted1 = {A_REG reg; INT bd;} WORD_SIZE cost(2,4) bd "(" reg ")" . -index_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(2,5) - bd "(" reg "," xreg ".l)" . - -LOCAL = {INT bd;} WORD_SIZE cost(2,6) bd "(a6)" . -#if WORD_SIZE==2 -/* pointers may go into DLOCAL's */ -DLOCAL = {INT bd;} 4 cost(2,6) bd "(a6)" . -#endif - -local_addr = {INT bd;} 4 cost(2,6) bd "(a6)" . -regAcon = {A_REG reg; INT bd;} 4 cost(2,6) bd "(" reg ")" . -regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,8) - bd "(" reg "," xreg ".l)" . - /* note: in the m68k[24] version %sc always equals 1 */ -#endif - -#ifdef SYNTAX_68020 - /* Part (ii) in m68020 syntax */ -absolute4 = {ADDR bd;} 4 cost(4,7) "(" bd ")" . -offsetted4 = {A_REG reg; INT bd;} 4 cost(2,6) "(" bd "," reg ")" . -index_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . -absolute2 = {ADDR bd;} WORD_SIZE cost(4,7) "(" bd ")" . -offsetted2 = {A_REG reg; INT bd;} WORD_SIZE cost(2,6) "(" bd "," reg ")" . -index_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . -absolute1 = {ADDR bd;} WORD_SIZE cost(4,7) "(" bd ")" . -offsetted1 = {A_REG reg; INT bd;} WORD_SIZE cost(2,6) "(" bd "," reg ")" . -index_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} WORD_SIZE cost(4,9) - "(" bd "," reg "," xreg ".l*" sc ")" . - -LOCAL = {INT bd;} WORD_SIZE cost(2,6) "(" bd ",a6)" . -#if WORD_SIZE==2 -/* pointers may go into DLOCAL's */ -DLOCAL = {INT bd;} 4 cost(2,6) "(" bd ",a6)" . -#endif -local_addr = {INT bd;} 4 cost(2,3) "(" bd ",a6)" . -regAcon = {A_REG reg; INT bd;} 4 cost(2,3) "(" bd "," reg ")" . -regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,7) - "(" bd "," reg "," xreg ".l*" sc ")" . -#endif -#ifdef TBL68020 - /* Part (iii) */ -abs_index4 = {INT sc; D_REG4 xreg; ADDR bd;} 4 cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off4 = {A_REG reg; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off4 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off4 = {ADDR bd; ADDR od;} 4 cost(8,22) "([" bd "]," od ")" . -ABS_indoff4 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off4 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -abs_index2 = {INT sc; D_REG4 xreg; ADDR bd;} WORD_SIZE cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off2 = {A_REG reg; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off2 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off2 = {ADDR bd; ADDR od;} WORD_SIZE cost(8,22) "([" bd "]," od ")" . -ABS_indoff2 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off2 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -abs_index1 = {INT sc; D_REG4 xreg; ADDR bd;} WORD_SIZE cost(6,9) - "(" bd "," xreg ".l*" sc ")" . -OFF_off1 = {A_REG reg; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," od ")" . -OFF_indoff1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -INDOFF_off1 = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} WORD_SIZE cost(6,19) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -ABS_off1 = {ADDR bd; ADDR od;} WORD_SIZE cost(8,22) "([" bd "]," od ")" . -ABS_indoff1 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "]," xreg ".l*" sc "," od ")" . -ABSIND_off1 = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} WORD_SIZE cost(8,22) - "([" bd "," xreg ".l*" sc "]," od ")" . - -ILOCAL = {INT bd;} WORD_SIZE cost(4,16) "([" bd ",a6])" . - -off_con = {A_REG reg; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "]," od ")". -off_regXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "]," xreg ".l*" sc "," od ")" . -indoff_con = {A_REG reg; D_REG4 xreg; INT sc; INT bd; ADDR od;} 4 cost(6,18) - "([" bd "," reg "," xreg ".l*" sc "]," od ")" . -abs_con = {ADDR bd; ADDR od;} 4 cost(8,21) "([" bd "]," od ")" . -abs_regXcon = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,21) - "([" bd "]," xreg ".l*" sc "," od ")" . -absind_con = {INT sc; D_REG4 xreg; ADDR bd; ADDR od;} 4 cost(8,21) - "([" bd "," xreg ".l*" sc "]," od ")" . -ext_regX = {INT sc; D_REG4 xreg; ADDR bd;} 4 cost(6,15) - "(" bd "," xreg ".l*" sc ")" . - -regX = {INT sc; D_REG4 xreg;} 4 cost(2,7) "(" xreg ".l*" sc ")" . -DREG_pair = {D_REG4 reg1; D_REG4 reg2;} 8 cost(2,0) reg1 ":" reg2 . - -#define t_regAregXcon regAregXcon -#define t_regAcon regAcon - -#else /* TBL68020 */ -t_regAregXcon = {A_REG reg; D_REG4 xreg; INT sc; INT bd;} 4 cost(2,8) . -t_regAcon = {A_REG reg; INT bd;} 4 cost(2,6) . -#endif - -#if WORD_SIZE!=2 -#define DLOCAL LOCAL -#endif - -SETS - - /* The SETS list cannot be kept as 'readable' as the TOKENS - * list because cgg is one pass. - * We makes use of the fact that sets are indeed sets. Thus - * D_REG + D_REG4 == D_REG, when the wordsize is 4. - */ - -sconsts = small_const + bconst . -consts = const + sconsts + zero_const. -#if WORD_SIZE!=2 -#define small_const4 small_const -#define zero_const4 zero_const -#define bconst4 bconst -#define const4 const -#define sconsts4 sconsts -#define consts4 consts -#else -sconsts4 = small_const4 + bconst4 . -consts4 = const4 + sconsts4 + zero_const4. -#endif - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -data4 = D_REG4 + DLOCAL + consts4 + post_inc4 + pre_dec4 + - indirect4 + offsetted4 + index_off4 + absolute4 + - ext_addr + dreg4 . -memory4 = data4 - D_REG4 - dreg4 . -control4 = indirect4 + offsetted4 + index_off4 + absolute4 + - DLOCAL. -alterable4 = data4 + A_REG - consts4 - ext_addr . -any4 = data4 + A_REG . /* all four above together */ - -#if WORD_SIZE==2 -data2 = D_REG + LOCAL + dreg2 + post_inc2 + pre_dec2 + - indirect2 + offsetted2 + index_off2 + absolute2 + - consts . -memory2 = data2 - D_REG - dreg2 . -control2 = indirect2 + offsetted2 + index_off2 + absolute2 + LOCAL. -#else -data2 = dreg2 + post_inc2 + pre_dec2 + indirect2 + - offsetted2 + index_off2 + absolute2 + consts . -memory2 = data2 - dreg2 . -control2 = indirect2 + offsetted2 + index_off2 + absolute2 . -#endif -alterable2 = data2 + D_REG - consts . -any2 = data2 + D_REG . - -data1 = dreg1 + post_inc1 + pre_dec1 + indirect1 + - offsetted1 + index_off1 + absolute1 + consts . -memory1 = data1 - dreg1 . -control1 = indirect1 + offsetted1 + index_off1 + absolute1 . -alterable1 = data1 + D_REG - consts . -any1 = data1 + D_REG . - -#else /* TBL68020 */ - -data4 = D_REG4 + indirect4 + post_inc4 + pre_dec4 + index_off4 + - offsetted4 + OFF_off4 + OFF_indoff4 + - INDOFF_off4 + dreg4 + - ABS_off4 + ABS_indoff4 + ABSIND_off4 + - absolute4 + abs_index4 + consts4 + ext_addr + - DLOCAL -#if WORD_SIZE!=2 - + ILOCAL -#endif - . -memory4 = data4 - D_REG4 - dreg4 . -control4 = memory4 - (post_inc4 + pre_dec4 + consts4 + ext_addr). -alterable4 = data4 + A_REG - consts - ext_addr . -any4 = data4 + A_REG . /* all four above together */ - -#if WORD_SIZE==2 -data2 = D_REG + LOCAL+ ILOCAL+ - dreg2 + indirect2 + post_inc2 + pre_dec2 + index_off2 + - offsetted2 + OFF_off2 + OFF_indoff2 + - INDOFF_off2 + - ABS_off2 + ABS_indoff2 + ABSIND_off2 + - absolute2 + abs_index2 + consts . -memory2 = data2 - D_REG - dreg2 . -#else -data2 = dreg2 + indirect2 + post_inc2 + pre_dec2 + index_off2 + - offsetted2 + OFF_off2 + OFF_indoff2 + - INDOFF_off2 + - ABS_off2 + ABS_indoff2 + ABSIND_off2 + - absolute2 + abs_index2 + consts . -memory2 = data2 - dreg2 . -#endif -control2 = memory2 - (post_inc2 + pre_dec2 + consts ) . -alterable2 = data2 + D_REG - consts . -any2 = data2 + D_REG. /* all four above together */ - -data1 = dreg1 + indirect1 + post_inc1 + pre_dec1 + index_off1 + - offsetted1 + OFF_off1 + OFF_indoff1 + - INDOFF_off1 + - ABS_off1 + ABS_indoff1 + ABSIND_off1 + - absolute1 + abs_index1 + consts . -memory1 = data1 - dreg1 . -control1 = memory1 - (post_inc1 + pre_dec1 + consts ) . -alterable1 = data1 + D_REG - consts . -any1 = data1 + D_REG. /* all four above together */ - -#endif /* TBL68020 */ - /* This is a common part */ -#if WORD_SIZE==2 -/* Not any4, since any is used in 'with' and not in 'kills' */ -any = any2 + any1 . -#else -any = any4 + any2 + any1 . -#endif -control = control4 + control2 + control1 . -indirect = indirect4 + indirect2 + indirect1 . -offsetted = offsetted4 + offsetted2 + offsetted1 . -index_off = index_off4 + index_off2 + index_off1 . -absolute = absolute4 + absolute2 + absolute1 . -pre_post = pre_dec4 + pre_dec2 + pre_dec1 + - post_inc4 + post_inc2 + post_inc1 . - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -regind_addr = regAcon + regAregXcon + t_regAcon + t_regAregXcon . -address = ext_addr + local_addr + regAcon + regAregXcon . -all_regind = indirect + offsetted + pre_post + index_off + - regind_addr + areg . -all_indir = all_regind . -allexceptcon = ALL - ( D_REG + A_REG + consts + dreg2 + dreg1 + - local_addr + ext_addr + regAcon + regAregXcon + - t_regAcon + t_regAregXcon ) . -use_index = index_off4 + index_off2 + index_off1 . - -#else /* TBL68020 */ - -reg_memind4 = OFF_off4 + OFF_indoff4 + INDOFF_off4 . -memind4 = reg_memind4 + - ABS_off4 + ABS_indoff4 . -reg_memind2 = OFF_off2 + OFF_indoff2 + INDOFF_off2 . -memind2 = reg_memind2 + - ABS_off2 + ABS_indoff2 . -reg_memind1 = OFF_off1 + OFF_indoff1 + INDOFF_off1 . -memind1 = reg_memind1 + - ABS_off1 + ABS_indoff1 . -reg_memind = reg_memind4 + reg_memind2 + reg_memind1 . -memind = memind4 + memind2 + memind1 . -regind_addr = regAcon + regAregXcon + - off_con + off_regXcon + - indoff_con . -address = regind_addr + - ext_addr + local_addr + - abs_con + abs_regXcon + - absind_con + - ext_regX . -all_regind = indirect + offsetted + index_off + pre_post + - reg_memind + regind_addr + areg . -all_indir = all_regind + memind + ILOCAL . -allexceptcon = ALL - ( D_REG + A_REG + consts + dreg2 + dreg1 + - local_addr + ext_addr + regAcon + regAregXcon + ext_regX ) . -use_index4 = index_off4 + abs_index4 + - OFF_indoff4 + INDOFF_off4 + - ABS_indoff4 + ABSIND_off4 . -use_index2 = index_off2 + abs_index2 + - OFF_indoff2 + INDOFF_off2 + - ABS_indoff2 + ABSIND_off2 . -use_index1 = index_off1 + abs_index1 + - OFF_indoff1 + INDOFF_off1 + - ABS_indoff1 + ABSIND_off1 . -use_indaddr = regAregXcon + - off_regXcon + indoff_con + - abs_regXcon + absind_con + - ext_regX . - -use_index = use_index4 + use_index2 + use_index1 + use_indaddr + regX . - -#endif /* TBL68020 */ - /* A common part */ -posextern = absolute + all_indir . - -#if WORD_SIZE==2 -genreg2 = D_REG . -#define genreg genreg2 -#else -#define genreg genreg4 -#endif -genreg4 = D_REG4 + A_REG. -label = llabel + slabel . -immediate4 = consts4 + ext_addr . -#if WORD_SIZE==2 -immediate2 = consts . -#endif -conreg4 = D_REG4 + immediate4 . -conreg2 = dreg2 + consts + D_REG . -conreg1 = dreg1 + consts + D_REG . -#if WORD_SIZE==2 -conreg = conreg1 + conreg2 . -#else -conreg = conreg1 + conreg2 + conreg4 . -#endif -shconreg = D_REG + small_const . -datalt4 = data4 * alterable4 . -datalt2 = data2 * alterable2 . -datalt1 = data1 * alterable1 . -datalt = datalt4 + datalt2 + datalt1 . -memalt4 = memory4 * alterable4 . -memalt2 = memory2 * alterable2 . -memalt1 = memory1 * alterable1 . - -#ifndef TBL68020 - /* A m68k2/m68k4 part */ -imm_cmp4 = alterable4 - A_REG . -imm_cmp2 = alterable2 + D_REG . -imm_cmp1 = datalt1 + D_REG . - -test_set4 = datalt4 + extend2 + extend1_4 . -#if WORD_SIZE==2 -test_set2 = datalt2 + extend1 . -#else -test_set2 = datalt2 . -#endif -test_set1 = datalt1 . - -#else /* TBL68020 */ - -imm_cmp4 = any4 - immediate4 - A_REG . -imm_cmp2 = any2 - consts . -imm_cmp1 = any1 - consts . - -test_set4 = any4 - immediate4 + extend2 + extend1_4 . -#if WORD_SIZE==2 -test_set2 = data2 + extend1 - immediate2 . -#else -test_set2 = data2 - consts . -#endif -test_set1 = data1 - consts . - -#endif /* TBL68020 */ - -test_set = test_set4 + test_set2 + test_set1 . - -#ifndef TBL68020 -t_address = address + t_regAregXcon + t_regAcon . -#else /* TBL68020 */ -#define t_address address -#endif /* TBL68020 */ - -#if TBL68881 -freg = FD_REG + FS_REG . -store4 = any4 + FS_REG . -#else -store4 = any4 . -#endif -#if WORD_SIZE==2 -dups2 = genreg2 . -#endif -dups4 = genreg4 . - -#include "instrmacs.h" - -INSTRUCTIONS - - /* Since the 68000 , the 68010 and the 68020 instruction sets are rather - * extensive, especially because e.g. 'add.l' and 'add.w' are - * considered different instructions, only those instructions are - * listed here that are used in the rest of this table. - * - * Instruction timing cost cannot be accurately given, nor the timing - * cost for getting operands. Detailed information about this can be - * found in the "MC68020 User's Manual", section 9, about instruction - * timing. The cost used in this table are 'worst case' cost, as - * mentioned in section 9 of the user's manual. Furthermore, the - * timing information for the 68k[24] and the 68020 differ, which - * means that the 68k[24] will not always have the best code - * possible. - * - * The first few instructions had to be added because register - * variables are used. The LOCALs below are register variables. - * One may not conclude that these operations are also allowed - * on LOCALs that are not register variables. - * The cost have been adapted, but are not accurate; when 'real' - * LOCALs are used the cost are very inaccurate. - */ - -add_i ADD_I any_int:ro, LOCAL:rw:cc cost(0,0). -sub_i SUB_I any_int:ro, LOCAL:rw:cc cost(0,0). -lea address:ro, DLOCAL:wo cost(0,0). -sh "illegal" shconreg+LOCAL:ro, LOCAL:rw:cc cost(0,0). -xxx "illegal" data4:ro, LOCAL:rw:cc cost(0,0). -xxx "illegal" LOCAL:ro, alterable4:rw:cc cost(0,0). -#if WORD_SIZE==2 -/* divs_w "divs.w" data2:ro, LOCAL:rw:cc cost(0,56). */ -/* divu_w "divu.w" data2:ro, LOCAL:rw:cc cost(0,44). */ -muls_w "muls.w" data2:ro, LOCAL:rw:cc cost(0,28). -mulu_w "mulu.w" data2:ro, LOCAL:rw:cc cost(0,28). -#endif -#if TBL68020 && WORD_SIZE!=2 -divs_l "divs.l" data4:ro, LOCAL:rw:cc cost(0,90). -divu_l "divu.l" data4:ro, LOCAL:rw:cc cost(0,78). -muls_l "muls.l" data4:ro, LOCAL:rw:cc cost(0,44). -mulu_l "mulu.l" data4:ro, LOCAL:rw:cc cost(0,44). -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -add_l "add.l" any4:ro, D_REG4:rw:cc cost(2,3). -#else -add_l "add.l" any4:ro, D_REG+LOCAL:rw:cc cost(2,3). -#endif -add_l "add.l" any4:ro, A_REG+DLOCAL+areg:rw cost(2,3). -add_l "add.l" conreg4:ro, alterable4:rw:cc cost(2,6). -#if WORD_SIZE==2 -add_w "add.w" any2:ro, D_REG+LOCAL:rw:cc cost(2,3). -add_w "add.w" conreg2:ro, alterable2:rw:cc cost(2,6). -#endif -and_l "and.l" data4:ro, D_REG4:rw:cc cost(2,3). -and_l "and.l" D_REG4:ro, memalt4:rw:cc cost(2,6). -and_l "and.l" consts4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -and_w "and.w" data2:ro, D_REG:rw:cc cost(2,3). -and_w "and.w" D_REG:ro, memalt2:rw:cc cost(2,6). -and_w "and.w" consts:ro, datalt2:rw:cc cost(2,6). -#endif -asl_l "asl.l" shconreg:ro, D_REG4:rw:cc cost(2,5). -asl "asl #1," memalt2:rw:cc cost(2,4). -asr_l "asr.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -asr "asr #1," memalt2:rw:cc cost(2,4). -#if WORD_SIZE==2 -asl_w "asl.w" shconreg:ro, D_REG:rw:cc cost(2,5). -asr_w "asr.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -bclr const:ro, D_REG:rw kills:cc cost(2,4). -bra label cost(2,5). -bcc label cost(2,5). -bcs label cost(2,5). -beq label cost(2,5). -bge label cost(2,5). -bgt label cost(2,5). -bhi label cost(2,5). -ble label cost(2,5). -bls label cost(2,5). -blt label cost(2,5). -bmi label cost(2,5). -bne label cost(2,5). -bpl label cost(2,5). -bvc label cost(2,5). -bvs label cost(2,5). -bset conreg2:ro, D_REG+D_REG4:rw kills :cc cost(2,4). -btst conreg2:ro, any1:rw kills :cc cost(2,3). -/* Check dreg[21] for m68020 and m68k2 */ -clr_l "clr.l" D_REG4+dreg4:wo:cc cost(2,3). -clr_l "clr.l" memalt4:wo:cc cost(2,6). -clr_w "clr.w" D_REG+dreg2:wo:cc cost(2,2). -clr_w "clr.w" memalt2:wo:cc cost(2,4). -clr_b "clr.b" D_REG+dreg1:wo:cc cost(2,2). -clr_b "clr.b" memalt1:wo:cc cost(2,4). -cmp_l "cmp.l" any4:ro, genreg4:ro kills :cc cost(2,3). -cmp_l "cmp.l" post_inc4:ro, post_inc4:ro kills :cc cost(2,2). -cmp_l "cmp.l" immediate4:ro, imm_cmp4:ro kills :cc cost(2,2). -#if WORD_SIZE==2 -cmp_w "cmp.w" any2+extend2:ro, D_REG+dreg2+extend2:ro kills :cc cost(2,2). -#else -cmp_w "cmp.w" any2+extend2:ro, dreg2+extend2:ro kills :cc cost(2,2). -#endif -cmp_w "cmp.w" post_inc2:ro, post_inc2:ro kills :cc cost(2,2). -cmp_w "cmp.w" consts:ro, imm_cmp2:ro kills :cc cost(2,2). -cmp_b "cmp.b" any1+extend1+extend1_4:ro, dreg1+extend1+extend1_4:ro kills :cc cost(2,3). -cmp_b "cmp.b" post_inc1:ro, post_inc1:ro kills :cc cost(2,2). -cmp_b "cmp.b" consts:ro, imm_cmp1:ro kills :cc cost(2,2). -dbf D_REG4:rw, label cost(2,5). -eor_l "eor.l" conreg4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -eor_w "eor.w" conreg2:ro, datalt2:rw:cc cost(2,4). -#endif -/* in the next two instructions: LOCAL only allowed if register var */ -ext_l "ext.l" D_REG+LOCAL+D_REG4:rw:cc cost(2,2). -ext_w "ext.w" D_REG+LOCAL+D_REG4:rw:cc cost(2,2). -jmp address+control4 cost(2,0). -jsr address+control4 kills :cc d0 d1 d2 a0 a1 cost(2,3). -lea address+control4:ro, A_REG+areg:wo cost(2,0). -/* -lsl_l "lsl.l" shconreg:ro, D_REG:rw:cc cost(2,4). -lsl "lsl #1," memalt2:rw:cc cost(2,4). -*/ -lsr_l "lsr.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -#if WORD_SIZE==2 -lsr_w "lsr.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -lsr "lsr #1," memalt2:rw:cc cost(2,4). -/* move_l does not set the condition codes if the destination is an - address register! -*/ -move_l "move.l" any4:ro, A_REG+areg:wo cost(2,2). -move_l "move.l" any4:ro, alterable4+dreg4-(areg+A_REG):wo:cc cost(2,2). -#if WORD_SIZE==2 -move_l "move.l" sconsts:ro, D_REG+dreg2:wo:cc cost(2,2). -/* -move_l "move.l" any2:ro, alterable4+dreg4-(areg+A_REG):wo:cc cost(2,2). -*/ -move_w "move.w" any2:ro, alterable2+dreg2:wo:cc cost(2,2). -move_b "move.b" any1:ro, alterable1+dreg2:wo:cc cost(2,2). -#else -move_w "move.w" any2:ro, alterable2+dreg4:wo:cc cost(2,2). -move_b "move.b" any1:ro, alterable1+dreg4:wo:cc cost(2,2). -#endif -neg_b "neg.b" D_REG:rw:cc cost(2,3). -neg_w "neg.w" D_REG:rw:cc cost(2,3). -neg_l "neg.l" D_REG4:rw:cc cost(2,3). -neg_l "neg.l" memory4:rw:cc cost(2,6). -#if WORD_SIZE==2 -neg_w "neg.w" memory2:rw:cc cost(2,6). -#endif -not_l "not.l" D_REG4:rw:cc cost(2,3). -not_l "not.l" memory4:rw:cc cost(2,6). -#if WORD_SIZE==2 -not_w "not.w" D_REG:rw:cc cost(2,3). -not_w "not.w" memory2:rw:cc cost(2,6). -#endif -or_l "or.l" data4:ro, D_REG4:rw:cc cost(2,3). -or_l "or.l" D_REG4:ro, memalt4:rw:cc cost(2,6). -or_l "or.l" consts4:ro, datalt4:rw:cc cost(2,6). -#if WORD_SIZE==2 -or_w "or.w" data2:ro, D_REG:rw:cc cost(2,3). -or_w "or.w" D_REG:ro, memalt2:rw:cc cost(2,6). -or_w "or.w" consts:ro, datalt2:rw:cc cost(2,6). -#endif -rol_l "rol.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -rol "rol #1," memalt2:rw:cc cost(2,4). -ror_l "ror.l" shconreg:ro, D_REG4:rw:cc cost(2,4). -ror "ror #1," memalt2:rw:cc cost(2,4). -#if WORD_SIZE==2 -rol_w "rol.w" shconreg:ro, D_REG:rw:cc cost(2,4). -ror_w "ror.w" shconreg:ro, D_REG:rw:cc cost(2,4). -#endif -roxl "roxl #1," memalt2:rw:cc cost(2,4). -roxr "roxr #1," memalt2:rw:cc cost(2,4). -sne datalt1:rw cost(2,3). -sub_l "sub.l" any4:ro, D_REG4:rw:cc cost(2,3). -sub_l "sub.l" any4+areg:ro, A_REG+areg:rw cost(2,3). -sub_l "sub.l" conreg4:ro, alterable4:rw:cc cost(2,6). -#if WORD_SIZE==2 -sub_w "sub.w" any2:ro, D_REG+LOCAL:rw:cc cost(2,3). -sub_w "sub.w" conreg2:ro, alterable2:rw:cc cost(2,6). -/* On a swap, we only want the lower part of D_REG, so don't set cc */ -swap D_REG:rw kills :cc cost(2,2). -#endif -tst_l "tst.l" test_set4:ro:cc cost(2,3). -tst_w "tst.w" test_set2+extend2:ro:cc cost(2,3). -tst_b "tst.b" test_set1+extend1+extend1_4:ro:cc cost(2,3). -unlk A_REG cost(2,6). - -bxx "illegal" label cost(2,5). -sxx "illegal" any_int:wo cost(2,5). -#if WORD_SIZE==2 -s4xx "illegal" any4:wo cost(2,5). -xxx "illegal" any4+any2:ro, any4+any2:rw:cc cost(2,3). -bit "illegal" control4+control2:rw:cc cost(2,6). -#else -xxx "illegal" any4:ro, any4:rw:cc cost(2,3). -bit "illegal" control4:rw:cc cost(2,6). -#endif -sh "illegal" shconreg:ro, D_REG:rw:cc cost(2,4). -shw "illegal" control2:rw:cc cost(2,4). - -#if WORD_SIZE==2 -divs_w "divs.w" data2:ro, D_REG:rw:cc cost(0,56). -divu_w "divu.w" data2:ro, D_REG:rw:cc cost(0,44). -muls_w "muls.w" data2:ro, D_REG:rw:cc cost(0,28). -mulu_w "mulu.w" data2:ro, D_REG:rw:cc cost(0,28). -#endif -#ifdef TBL68020 -cmp2_l "cmp2.l" address+control4:ro, genreg4:ro kills :cc cost(2,18). -divs_l "divs.l" data4:ro, D_REG4:rw:cc cost(2,90). -divu_l "divu.l" data4:ro, D_REG4:rw:cc cost(2,78). -divsl_l "divsl.l" data4:ro, DREG_pair:rw kills :cc cost(2,90). -divul_l "divul.l" data4:ro, DREG_pair:rw kills :cc cost(2,78). -pea address+control4+regX cost(2,4). -#if WORD_SIZE==2 -cmp2_w "cmp2.w" address+control2:ro, genreg2:ro kills :cc cost(2,18). -extb_l "extb.l" extend1_4+D_REG4:rw:cc cost(2,4). -muls_l "muls.l" data4:ro, D_REG4:rw:cc cost(2,44). -mulu_l "mulu.l" data4:ro, D_REG4:rw:cc cost(2,44). -#else -/* in the next instruction: LOCAL only allowed if register var */ -extb_l "extb.l" extend1_4+D_REG+LOCAL:rw:cc cost(2,4). -muls_l "muls.l" data4:ro, D_REG+LOCAL:rw:cc cost(2,44). -mulu_l "mulu.l" data4:ro, D_REG+LOCAL:rw:cc cost(2,44). -#endif -#else /* TBL68020 */ -pea address+control4 cost(2,4). -#endif /* TBL68020 */ - - /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * Extra pseudo instruction; it just kills a D_REG; - * it is necessary with long divides where remainders are important; - * see also: 'pat rmi' and 'pat rmu' - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -killreg "! kill" D_REG+D_REG4+A_REG:wo cost(0,0). -killcc "! killcc" kills :cc cost(0,0). -#if TBL68881 -/* These descriptions are not very accurate, because we have no - other 8-byte objects in the table. - */ -fmove_s "fmove.s" data4:ro, freg:wo cost(4,100). -fmove_s "fmove.s" freg:ro, data4:wo cost(4,100). -fmove_d "fmove.d" freg:ro, data4:wo cost(4,100). -fmove_d "fmove.d" data4:ro, freg:ro cost(4,100). -fmove_l "fmove.l" freg:ro, D_REG:wo cost(4,100). -fmove_l "fmove.l" data4:ro, freg:wo cost(4,100). -fmove freg:ro,freg:wo cost(4,100). -fadd_s "fadd.s" data4:ro, freg:rw cost(4,100). -fadd_d "fadd.d" data4:ro, freg:rw cost(4,100). -fsub_s "fsub.s" data4:ro, freg:rw cost(4,100). -fsub_d "fsub.d" data4:ro, freg:rw cost(4,100). -fsub freg:ro, freg:rw cost(4,100). -fmul freg:ro, freg:rw cost(4,100). -fmul_s "fmul.s" data4:ro, freg:rw cost(4,100). -fmul_d "fmul.d" data4:ro, freg:rw cost(4,100). -fdiv freg:ro, freg:rw cost(4,100). -fdiv_s "fdiv.s" data4:ro, freg:rw cost(4,100). -fdiv_d "fdiv.d" data4:ro, freg:rw cost(4,100). -fcmp freg:ro, freg:ro cost(4,100). -fbeq label:ro cost(4,4). -fblt label:ro cost(4,4). -fmovecr const:ro, freg:rw cost(4,100). -fabs freg:rw cost(4,100). -fneg freg:rw cost(4,100). -fgetman freg:rw cost(4,100). -fintrz freg:ro, freg:wo cost(4,100). -fgetexp freg:ro, freg:wo cost(4,100). -fsub_l "fsub.l" const:ro, freg:rw cost(4,100). -#endif - - -MOVES - -from consts %num==0 to D_REG4+dreg4 - gen clr_l %2 - -#if WORD_SIZE==2 -from zero_const4 %num==0 to A_REG+areg - gen sub_l %2,%2 - -from zero_const4 %num==0 to D_REG4+dreg4 - gen clr_l %2 -#endif - -from consts %num==0 to A_REG+areg - gen sub_l %2,%2 - -#if WORD_SIZE==2 -from consts %num==0 to D_REG+dreg2 - gen clr_w %2 - -from sconsts to D_REG+dreg2 - gen move_l %1,%2 /* uses moveq */ - -from consts to D_REG4+dreg4 - gen move_l {const4, %1.num},%2 -#endif - -#if WORD_SIZE==2 -from sconsts4+zero_const4 %num==0 to memalt4 -#else -from consts %num==0 to memalt4 -#endif - gen clr_l %2 - -from consts %num==0 to memalt2 - gen clr_w %2 - -from consts %num==0 to memalt1 - gen clr_b %2 - -from consts to memalt1 - gen move_b {const, low8(%1.num)}, %2 - -#if WORD_SIZE!=2 -from consts to memalt2 - gen move_w {const, low16(%1.num)}, %2 -#endif - -from regAcon %bd==0 to A_REG+areg - gen move_l %1.reg, %2 - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) to A_REG+areg - gen lea {regAregXcon, %1.reg, %1.xreg, 1, %1.bd}, %2 - -from t_regAregXcon to A_REG+areg - gen lea {regAregXcon, %1.reg, %1.xreg, 1, 0}, %2 - add_l {const4, %1.bd}, %2 - -from t_regAcon sfit(%bd, 16) to A_REG+areg - gen lea {regAcon, %1.reg, %1.bd}, %2 - -from t_regAcon to A_REG+areg - gen move_l %1.reg, %2 - add_l {const4, %1.bd}, %2 -#endif /* TBL68020 */ - -from address - ext_addr to A_REG+areg - gen lea %1, %2 - -#if WORD_SIZE==2 -from ext_addr to A_REG+areg - gen lea {absolute4, %1.bd}, %2 -#endif - -from any4 to areg+A_REG - gen move_l %1, %2 - -from any4 to alterable4-(areg+A_REG) - gen move_l %1, %2 - -from any2 to alterable2 - gen move_w %1, %2 - -from any1 to alterable1 - gen move_b %1, %2 - -#if WORD_SIZE!=2 -from any4-sconsts4 to A_REG+areg - gen move_l %1, %2 - -from any2 to dreg4 - gen clr_l %2 - move_w %1, %2 -#endif - -from any1 to dreg_int - gen clr_i %2 - move_b %1, %2 - -#if WORD_SIZE==2 -from any1 to dreg2 - gen clr_w %2 - move_b %1, %2 -#endif - -#if TBL68881 -from data4 to FS_REG - gen fmove_s %1, %2 - -from FS_REG to datalt4 - gen fmove_s %1, %2 -#endif - -TESTS - -/* For the 68020 and m68k4, the extend1_4 will be extend1 */ -to test test_set4-(extend2+extend1+extend1_4) - gen tst_l %1 - -to test test_set2+extend2 - gen tst_w %1 - -to test test_set1+extend1+extend1_4 - gen tst_b %1 - - -STACKINGRULES - - -#if WORD_SIZE!=2 -from consts %num==0 to STACK - gen clr_l {pre_dec4, sp} -#else -from zero_const4 to STACK - gen clr_l {pre_dec4, sp} -from consts %num==0 to STACK - gen clr_w {pre_dec2, sp} -#endif - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) to STACK - gen pea {regAregXcon, %1.reg, %1.xreg, 1, %1.bd} - -from t_regAregXcon to STACK - gen pea {regAregXcon, %1.reg, %1.xreg, 1, 0} - add_l {const4, %1.bd}, {indirect4, sp} - -from t_regAcon sfit(%bd, 16) to STACK - gen pea {regAcon, %1.reg, %1.bd} - -from t_regAcon to STACK - gen move_l %1.reg, {pre_dec4, sp} - add_l {const4, %1.bd}, {indirect4, sp} -#endif /* TBL68020 */ - -from A_REG to STACK - gen pea {indirect4, %1} - -from address - ext_addr to STACK - gen pea %1 - -from ext_addr to STACK - gen pea {absolute4, %1.bd} - -#if WORD_SIZE!=2 -from consts to STACK - gen pea {absolute4, %1.num} -#else -from sconsts4 to STACK - gen pea {absolute4, %1.num} -from const4 to STACK - gen pea {absolute4, %1.num} -#endif - -from any4 to STACK - gen move_l %1, {pre_dec4, sp} - -#if WORD_SIZE!=2 -from any2 to STACK - uses DD_REG - gen clr_l %a - move_w %1, {dreg2, %a} - move_l %a, {pre_dec4, sp} - -from any2 to STACK - gen clr_l {pre_dec4, sp} - move_w %1, {offsetted2, sp, 2} -#else -from any2 to STACK - gen move_w %1, {pre_dec2, sp} -#endif - -from data1 to STACK - uses DD_REG -#if WORD_SIZE!=2 - gen clr_l %a - move_b %1, {dreg1, %a} - move_l %a, {pre_dec4, sp} -#else - gen clr_w %a - move_b %1, {dreg1, %a} - move_w %a, {pre_dec2, sp} -#endif - -from data1 to STACK -#if WORD_SIZE!=2 - gen clr_l {pre_dec4, sp} - move_b %1, {offsetted1, sp, 3} -#else - gen clr_w {pre_dec2, sp} - move_b %1, {offsetted1, sp, 1} -#endif - -from extend2 to STACK - gen ext_l %1.reg - move_l %1.reg,{pre_dec4, sp} - -from extend1_4 to STACK -#ifdef TBL68020 - gen extb_l %1.reg -#else - gen ext_w %1.reg - ext_l %1.reg -#endif - move_l %1.reg,{pre_dec4, sp} - -#if WORD_SIZE==2 -from extend1 to STACK - gen ext_w %1.reg - move_w %1.reg,{pre_dec2, sp} -#endif - -#ifdef TBL68020 -from regX to STACK - gen pea %1 -#endif /* TBL68020 */ - /* This last stackingrule is never used: whenever regX is put on - * the fakestack, some em-instuctions are left that remove it - * immediately. However cgg complained about not having a - * stackingrule for regX, so here it is - */ - -#if TBL68881 -from FS_REG to STACK - gen fmove_s %1,{pre_dec4,sp} - -from FD_REG to STACK - gen fmove_d %1,{pre_dec4,sp} -#endif -COERCIONS - - -from STACK - uses DD_REG4 - gen move_l {post_inc4, sp}, %a - yields %a - -#if WORD_SIZE==2 -from STACK - uses DD_REG - gen move_w {post_inc2,sp}, %a - yields %a -#endif - -from STACK - uses AA_REG - gen move_l {post_inc4, sp}, %a - yields %a - -#ifdef TBL68881 -from STACK - uses FS_REG - gen fmove_s {post_inc4, sp}, %a - yields %a -from STACK - uses FD_REG - gen fmove_d {post_inc4, sp}, %a - yields %a -#endif - -#ifndef TBL68020 -from t_regAregXcon sfit(%bd, 8) - yields {regAregXcon, %1.reg, %1.xreg, 1, %1.bd} - -from t_regAregXcon - uses AA_REG=%1.reg - gen add_l {const4, %1.bd}, %a - yields {regAregXcon, %a, %1.xreg, 1, 0} - -/* - * The following coercions are necessary because the code generator - * must be able to make the token from the real stack, otherwise the - * coercion will not be made. Unfortunatly, inside a coercion, we are only - * allowed to allocate 1 register, which means that there is no way to make - * a regAregXcon from the stack, which, in its turn, means that the other - * coercions will not be taken. - * -/*from STACK - uses AA_REG, DD_REG4 = {zero_const4, 0} - gen move_l {post_inc4, sp}, %a - yields {regAregXcon, %a, %b, 1, 0} -*/ -from STACK - uses AA_REG - gen move_l {post_inc4, sp}, %a - yields {regAcon, %a, 0} - -from t_regAcon sfit(%bd, 16) - yields {regAcon, %1.reg, %1.bd} - -from t_regAcon - uses reusing %1, AA_REG=%1.reg - gen add_l {const4, %1.bd}, %a - yields %a -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -from regAregXcon %bd==0 && %sc==1 - uses reusing %1, AA_REG = %1.reg - gen add_l {dreg4,%1.xreg},%a - yields %a - -from regAregXcon %sc==1 - uses reusing %1, AA_REG = %1.reg - gen add_l {dreg4, %1.xreg}, %a - yields {regAcon, %a, %1.bd} -#endif - -#if WORD_SIZE==2 -from sconsts - uses DD_REG4={const4, %1.num} /* uses moveq */ - yields %a.1 -#endif - -#if WORD_SIZE==2 -from any2 -uses reusing %1, DD_REG = %1 yields %a -#endif - -from any4 - uses reusing %1, DD_REG4 = %1 - yields %a - -from any4 - uses reusing %1, AA_REG = %1 - yields %a - -from t_address - uses reusing %1, AA_REG = %1 - yields %a - -#if TBL68881 -from data4 - uses reusing %1, FS_REG = %1 - yields %a -#endif - -from memory2 - uses DD_REG -#if WORD_SIZE!=2 - = {zero_const, 0} -#endif - gen move_w %1, %a yields %a - -from memory1 - uses DD_REG = {zero_const, 0} - gen move_b %1, %a yields %a - -from memory2 - uses DD_REG - gen move_w %1, %a yields {dreg2, %a} - -from memory1 - uses DD_REG - gen move_b %1, %a yields {dreg1, %a} - -from extend2 - gen ext_l %1.reg yields %1.reg - -#if WORD_SIZE==2 -from extend1 - gen ext_w %1.reg yields %1.reg -#endif - -from extend1_4 -#ifdef TBL68020 - gen extb_l %1.reg -#else - gen ext_w %1.reg - ext_l %1.reg -#endif - yields %1.reg - -PATTERNS - -/******************************** - * First some longer patterns * - ********************************/ - -pat lol sbi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with any_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sub_i %1, {LOCAL, $1} - neg_i {LOCAL, $1} - -pat lol sbi stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer -with conreg_int-bconst - kills all_indir, LOCAL %bd==$1 - gen sub_i %1, {LOCAL, $1} - neg_i {LOCAL, $1} - -pat lol sbu stl $1==$3 && $2==WORD_SIZE - leaving lol $1 sbi WORD_SIZE stl $1 - -pat lil sbi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer -with conreg_int-bconst - kills allexceptcon - gen sub_i %1, {indirect_int, regvar($1, reg_pointer)} - neg_i {indirect_int, regvar($1, reg_pointer)} - -pat lil sbi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any -with conreg_int-bconst - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen sub_i %1, {indirect_int, %a} - neg_i {indirect_int, %a} - -pat lil sbu sil $1==$3 && $2==WORD_SIZE - leaving lil $1 sbi WORD_SIZE sil $1 - -proc lolrbitstl example lol ngi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen bit* {LOCAL, $1} - -pat lol ngi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolrbitstl(NEG_I) -pat lol com stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolrbitstl(NOT_I) - -proc lolbitstl example lol ngi stl - kills all_indir, LOCAL %bd==$1 - gen bit* {LOCAL, $1} - -pat lol ngi stl $1==$3 && $2==WORD_SIZE call lolbitstl(NEG_I) -pat lol com stl $1==$3 && $2==WORD_SIZE call lolbitstl(NOT_I) -#if WORD_SIZE==2 -proc ldlbitsdl example ldl ngi sdl - kills all_indir, DLOCAL %bd==$1 - gen bit* {DLOCAL, $1} - -pat ldl ngi sdl $1==$3 && $2==4 call ldlbitsdl("neg.l") -pat ldl com sdl $1==$3 && $2==4 call ldlbitsdl("not.l") -#endif - -proc loebitste example loe ngi ste - kills posextern - gen bit* {absolute_int, $1} - -pat loe ngi ste $1==$3 && $2==WORD_SIZE call loebitste(NEG_I) -pat loe com ste $1==$3 && $2==WORD_SIZE call loebitste(NOT_I) -#if WORD_SIZE==2 -proc ldebitsde example lde ngi sde - kills posextern - gen bit* {absolute4, $1} - -pat lde ngi sde $1==$3 && $2==4 call ldebitsde("neg.l") -pat lde com sde $1==$3 && $2==4 call ldebitsde("not.l") -#endif - -proc lilrbitsil example lil ngi sil - kills allexceptcon - gen bit* {indirect_int, regvar($1, reg_pointer)} - -pat lil ngi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilrbitsil(NEG_I) -pat lil com sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilrbitsil(NOT_I) -pat lil dec sil $1==$3 && inreg($1)==reg_pointer - call lilrbitsil(DEC) -pat lil inc sil $1==$3 && inreg($1)==reg_pointer - call lilrbitsil(INC) - -proc lilbitsil example lil ngi sil - kills allexceptcon -#if TBL68020 - gen bit* {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen bit* {indirect_int, %a} -#endif - -pat lil ngi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilbitsil(NEG_I) -pat lil com sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilbitsil(NOT_I) -pat lil dec sil $1==$3 && inreg($1)!=reg_any - call lilbitsil(DEC) -pat lil inc sil $1==$3 && inreg($1)!=reg_any - call lilbitsil(INC) - -proc lolcshstl example lol loc sli stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sh* {small_const, $2}, {LOCAL, $1} - -pat lol loc sli stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASL_I) -pat lol loc sri stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASR_I) -pat lol loc slu stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ASL_I) -pat lol loc sru stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(LSR_I) -pat lol loc rol stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ROL_I) -pat lol loc ror stl $1==$4 && small($2) && $3==WORD_SIZE && inreg($1)==reg_any - call lolcshstl(ROR_I) - -proc lolrshstl example lol lol sli stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sh* {LOCAL, $2}, {LOCAL, $1} - -pat lol lol sli stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASL_I) -pat lol lol slu stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASL_I) -pat lol lol sri stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(ASR_I) -pat lol lol sru stl $1==$4 && inreg($1)==reg_any && $3==WORD_SIZE - && inreg($2)==reg_any - call lolrshstl(LSR_I) -pat lol lol rol stl $1==$4 && inreg($2)==reg_any && $3==WORD_SIZE - && inreg($1)==reg_any - call lolrshstl(ROL_I) -pat lol lol ror stl $1==$4 && inreg($2)==reg_any && $3==WORD_SIZE - && inreg($1)==reg_any - call lolrshstl(ROR_I) - -#if WORD_SIZE!=2 -proc lil1shlsil example lil loc sli sil /* only left */ - kills allexceptcon - gen shw* {offsetted2, regvar($1, reg_pointer), 2} - roxl {indirect2, regvar($1, reg_pointer)} - -pat lil loc sli sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shlsil("asl #1,") -pat lil loc slu sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shlsil("asl #1,") - -proc lil1shrsil example lil loc sli sil /* only right */ - kills allexceptcon - gen shw* {indirect2, regvar($1, reg_pointer)} - roxr {offsetted2, regvar($1, reg_pointer), 2} - -pat lil loc sri sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shrsil("asr #1,") -pat lil loc sru sil $1==$4 && $2==1 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lil1shrsil("lsr #1,") - -#endif - - -pat LLP lof inc LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen add_i {const, 1}, {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof dec LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen sub_i {const, 1}, {offsetted_int, regvar($1, reg_pointer), $2} - -/* the patterns with adp should use add_l */ -pat LLP LFP adp LLP SFP $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon - gen add_l {const4, $3}, {offsetted4, regvar($1, reg_pointer), $2} - -pat LEP LFP adp LEP SFP $1==$4 && $2==$5 - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {ABS_off4, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen add_l {const4, $3}, {offsetted4, %a, $2} -#endif - -pat LEP loi adp LEP sti $1==$4 && $2==4 && $5==4 - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {ABS_off4, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen add_l {const4, $3}, {indirect4, %a} -#endif - -#if WORD_SIZE!=2 -pat lil lof adp lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen add_l {const4, $3}, {offsetted4, %a, $2} -#endif - -pat lil loi adp lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen add_l {const4, $3}, {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen add_l {const4, $3}, {indirect4, %a} -#endif -#endif /* WORD_SIZE==2 */ - -pat lol inl $1==$2 && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen add_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat lol del $1==$2 && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen sub_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -/* the following rules are for unsigneds, since del and inl work on ints */ -pat lol loc lol adu stl $1==$3 && $3==$5 && $4==WORD_SIZE && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen add_i {const, $2}, {LOCAL, $1} - killreg %a - yields %a - -pat lol loc lol adu stl $1==$3 && $3==$5 && $4==WORD_SIZE - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen add_i {const, $2}, {LOCAL, $1} - killreg %a - yields %a - -pat lol dup loc sbu stl $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE && inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - uses DD_REG = {LOCAL, $1} - gen sub_i {const, $3}, {LOCAL, $1} - killreg %a - yields %a - -pat lol dup loc sbu stl $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen sub_i {const, $3}, {LOCAL, $1} - killreg %a - yields %a - -pat loe loc loe adu ste $1==$3 && $3==$5 && $4==WORD_SIZE - kills posextern - uses DD_REG = {absolute_int, $1} - gen add_i {const,$2}, {absolute_int, $1} - killreg %a - yields %a - -pat loe dup loc sbu ste $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - kills posextern - uses DD_REG = {absolute_int, $1} - gen sub_i {const,$3}, {absolute_int, $1} - killreg %a - yields %a - -pat lil loc lil adu sil $1==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen add_i {const, $2}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup loc sbu sil $1==$5 && $2==WORD_SIZE && $4==WORD_SIZE - && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen sub_i {const, $3}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -proc lolxxstl example lol and stl -with data_int-bconst - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* %1, {LOCAL, $1} - -pat lol adi stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(ADD_I) -pat lol adu stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(ADD_I) -pat lol and stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(AND_I) -pat lol ior stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any - call lolxxstl(OR_I) -pat lol xor stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with conreg_int-bconst - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen eor_i %1, {LOCAL, $1} - -#if TBL68020 || WORD_SIZE==2 -pat lol mli stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with data_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen muls_i %1, {LOCAL, $1} -pat lol mlu stl $1==$3 && $2==WORD_SIZE && inreg($1)==reg_any -with data_int - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen mulu_i %1, {LOCAL, $1} -#endif /* TBL68020 */ - -proc lolxxxstl example lol adi stl -with conreg_int-bconst - kills all_indir, LOCAL %bd==$1 - gen xxx* %1, {LOCAL, $1} - -pat lol adi stl $1==$3 && $2==WORD_SIZE call lolxxxstl(ADD_I) -pat lol adu stl $1==$3 && $2==WORD_SIZE call lolxxxstl(ADD_I) -pat lol and stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(AND_I) -pat lol ior stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(OR_I) -pat lol xor stl $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_pointer - call lolxxxstl(EOR_I) - -#if WORD_SIZE==2 -proc ldlxxxsdl example lol adi stl -with conreg4-bconst4 - kills all_indir, DLOCAL %bd==$1 - gen xxx* %1, {DLOCAL, $1} - -pat ldl adi sdl $1==$3 && $2==4 call ldlxxxsdl("add.l") -pat ldl adu sdl $1==$3 && $2==4 call ldlxxxsdl("add.l") -pat ldl and sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("and.l") -pat ldl ior sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("or.l") -pat ldl xor sdl $1==$3 && $2==4 && inreg($1)!=reg_pointer - call ldlxxxsdl("eor.l") -#endif - -proc lilxxsil example lil and sil -with conreg_int-bconst - kills allexceptcon - gen xxx* %1, {indirect_int, regvar($1, reg_pointer)} - -pat lil adi sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(ADD_I) -pat lil adu sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(ADD_I) -pat lil and sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(AND_I) -pat lil ior sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(OR_I) -pat lil xor sil $1==$3 && $2==WORD_SIZE && inreg($1)==reg_pointer - call lilxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil ads sil $1==$3 && $2==4 && inreg($1)==reg_pointer - call lilxxsil("add.l") -#endif - -proc lilxxxsil example lil adi sil -with conreg_int-bconst - kills allexceptcon -#if TBL68020 - gen xxx* %1, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* %1, {indirect_int, %a} -#endif - -pat lil adi sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(ADD_I) -pat lil adu sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(ADD_I) -pat lil and sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(AND_I) -pat lil ior sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(OR_I) -pat lil xor sil $1==$3 && $2==WORD_SIZE && inreg($1)!=reg_any - call lilxxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil ads sil $1==$3 && $2==4 && inreg($1)!=reg_any - call lilxxxsil("add.l") -#endif - -proc loexxxste example loe adi ste -with conreg_int-bconst - kills posextern - gen xxx* %1, {absolute_int, $1} - -pat loe adi ste $1==$3 && $2==WORD_SIZE call loexxxste(ADD_I) -pat loe adu ste $1==$3 && $2==WORD_SIZE call loexxxste(ADD_I) -pat loe and ste $1==$3 && $2==WORD_SIZE call loexxxste(AND_I) -pat loe ior ste $1==$3 && $2==WORD_SIZE call loexxxste(OR_I) -pat loe xor ste $1==$3 && $2==WORD_SIZE call loexxxste(EOR_I) -#if WORD_SIZE!=2 -pat loe ads ste $1==$3 && $2==4 call loexxxste("add.l") -#endif - -#if WORD_SIZE==2 -proc ldexxxsde example lde adi sde -with conreg4-bconst4 - kills posextern - gen xxx* %1, {absolute4, $1} - -pat lde adi sde $1==$3 && $2==4 call ldexxxsde("add.l") -pat lde adu sde $1==$3 && $2==4 call ldexxxsde("add.l") -pat lde and sde $1==$3 && $2==4 call ldexxxsde("and.l") -pat lde ior sde $1==$3 && $2==4 call ldexxxsde("or.l") -pat lde xor sde $1==$3 && $2==4 call ldexxxsde("eor.l") -#endif - -proc lollilxxxstl example lol lil adi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {indirect_int, regvar($2, reg_pointer)}, {LOCAL, $1} - -pat lol lil adi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(ADD_I) -pat lol lil adu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(ADD_I) -pat lol lil sbi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(SUB_I) -pat lol lil sbu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(SUB_I) -pat lol lil and stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(AND_I) -pat lol lil ior stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollilxxxstl(OR_I) - -proc lollfixxxstl example lol LLP lof adi stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {offsetted_int, regvar($2, reg_pointer), $3}, {LOCAL, $1} - -pat lol LLP lof adi stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(ADD_I) -pat lol LLP lof adu stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(ADD_I) -pat lol LLP lof sbi stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(SUB_I) -pat lol LLP lof sbu stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(SUB_I) -pat lol LLP lof and stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(AND_I) -pat lol LLP lof ior stl $1==$5 && $4==WORD_SIZE && inreg($1)==reg_any - && inreg($2)==reg_pointer - call lollfixxxstl(OR_I) - - -proc lolfrxlolf example LLP lof and LLP stf -with conreg_int-bconst - kills allexceptcon - gen xxx* %1, {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof adi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(ADD_I) -pat LLP lof adu LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(ADD_I) -pat LLP lof and LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(AND_I) -pat LLP lof ior LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(OR_I) -pat LLP lof xor LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - && inreg($1)==reg_pointer - call lolfrxlolf(EOR_I) -#if WORD_SIZE!=2 -pat LLP lof ads LLP stf $1==$4 && $2==$5 && $3==4 - && inreg($1)==reg_pointer - call lolfrxlolf("add.l") -#endif - -proc lolfxxlolf example LLP lof and LLP stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off_int, lb, $1, $2} -#else - uses AA_REG={DLOCAL, $1} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat LLP lof adi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(ADD_I) -pat LLP lof adu LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(ADD_I) -pat LLP lof and LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(AND_I) -pat LLP lof ior LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(OR_I) -pat LLP lof xor LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lolfxxlolf(EOR_I) -#if WORD_SIZE!=2 -pat LLP lof ads LLP stf $1==$4 && $2==$5 && $3==4 - call lolfxxlolf("add.l") -#endif - -#if WORD_SIZE!=2 -proc lilfxxlilf example lil lof and lil stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat lil lof adi lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -pat lil lof adu lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -pat lil lof and lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("and.l") -pat lil lof ior lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("or.l") -pat lil lof xor lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("eor.l") -pat lil lof ads lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lilfxxlilf("add.l") -#endif - -proc lefxxxsef example loe lof and loe stf -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {ABS_off_int, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen xxx* %1, {offsetted_int, %a, $2} -#endif - -pat LEP lof adi LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(ADD_I) -pat LEP lof adu LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(ADD_I) -pat LEP lof and LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(AND_I) -pat LEP lof ior LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(OR_I) -pat LEP lof xor LEP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lefxxxsef(EOR_I) -#if WORD_SIZE!=2 -pat LEP lof ads LEP stf $1==$4 && $2==$5 && $3==4 - call lefxxxsef("add.l") -#endif - -/* lil gets a word, not necessarily a pointer */ -#if WORD_SIZE!=2 -proc lilixxlili example lil loi and lil sti -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen xxx* %1, {indirect4, %a} -#endif - -pat lil loi adi lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -pat lil loi adu lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -pat lil loi and lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("and.l") -pat lil loi ior lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("or.l") -pat lil loi xor lil sti $1==$4 && $2==$3 && $2==$5 && $2==4 - && inreg($1)==reg_pointer - call lilixxlili("eor.l") -pat lil loi ads lil sti $1==$4 && $2==$3 && $2==$5 && $3==4 - && inreg($1)==reg_pointer - call lilixxlili("add.l") -#endif - -proc leixxxsei example loe loi and loe sti -with conreg_int-bconst - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen xxx* %1, {ABS_off_int, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen xxx* %1, {indirect_int, %a} -#endif - -pat LEP loi adi LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(ADD_I) -pat LEP loi adu LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(ADD_I) -pat LEP loi and LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(AND_I) -pat LEP loi ior LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(OR_I) -pat LEP loi xor LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leixxxsei(EOR_I) -#if WORD_SIZE!=2 -pat LEP loi ads LEP sti $1==$4 && $2==$3 && $2==$5 && $2==4 - call leixxxsei("add.l") -#endif - -proc lofruxxsof example LLP lof inc LLP stf - kills allexceptcon - gen bit* {offsetted_int, regvar($1, reg_pointer), $2} - -pat LLP lof inc LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lofruxxsof(INC) -pat LLP lof dec LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lofruxxsof(DEC) -pat LLP lof ngi LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - && $3==WORD_SIZE - call lofruxxsof(NEG_I) -pat LLP lof com LLP stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - && $3==WORD_SIZE - call lofruxxsof(NOT_I) - -proc lofuxxsof example LLP lof inc LLP stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off_int, lb, $1, $2} -#else - uses AA_REG={DLOCAL,$1} - gen bit* {offsetted_int,%a,$2} -#endif - -pat LLP lof inc LLP stf $1==$4 && $2==$5 - call lofuxxsof(INC) -pat LLP lof dec LLP stf $1==$4 && $2==$5 - call lofuxxsof(DEC) -pat LLP lof ngi LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lofuxxsof(NEG_I) -pat LLP lof com LLP stf $1==$4 && $2==$5 && $3==WORD_SIZE - call lofuxxsof(NOT_I) - -#if WORD_SIZE!=2 -proc lifuxxsif example lil lof inc lil stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off4, regvar($1, reg_pointer), 0, $2} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen bit* {offsetted4,%a,$2} -#endif - -pat lil lof inc lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lifuxxsif("add.l #1,") -pat lil lof dec lil stf $1==$4 && $2==$5 && inreg($1)==reg_pointer - call lifuxxsif("sub.l #1,") -pat lil lof ngi lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lifuxxsif("neg.l") -pat lil lof com lil stf $1==$4 && $2==$5 && $3==4 && inreg($1)==reg_pointer - call lifuxxsif("not.l") -#endif - -#if WORD_SIZE!=2 -proc liiuxxsii example lil loi inc lil sti - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {OFF_off4, regvar($1, reg_pointer), 0, 0} -#else - uses AA_REG={indirect4, regvar($1, reg_pointer)} - gen bit* {indirect4, %a} -#endif - -pat lil loi inc lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - call liiuxxsii("add.l #1,") -pat lil loi dec lil sti $1==$4 && $2==4 && $5==4 && inreg($1)==reg_pointer - call liiuxxsii("sub.l #1,") -pat lil loi ngi lil sti $1==$4 && $2==4 && $5==4 && $3==4 && inreg($1)==reg_pointer - call liiuxxsii("neg.l") -pat lil loi com lil sti $1==$4 && $2==4 && $5==4 && $3==4 && inreg($1)==reg_pointer - call liiuxxsii("not.l") -#endif - -proc lefuxxsef example loe lof inc loe stf - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {ABS_off_int, $1, $2} -#else - uses AA_REG={absolute4, $1} - gen bit* {offsetted_int, %a, $2} -#endif - -pat LEP lof inc LEP stf $1==$4 && $2==$5 - call lefuxxsef(INC) -pat LEP lof dec LEP stf $1==$4 && $2==$5 - call lefuxxsef(DEC) -pat LEP lof ngi LEP stf $1==$4 && $2==$5 && $3==4 - call lefuxxsef(NEG_I) -pat LEP lof com LEP stf $1==$4 && $2==$5 && $3==4 - call lefuxxsef(NOT_I) - -proc leiuxxsei example loe loi inc loe sti - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen bit* {ABS_off_int, $1, 0} -#else - uses AA_REG={absolute4, $1} - gen bit* {indirect_int, %a} -#endif - -pat LEP loi inc LEP sti $1==$4 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(INC) -pat LEP loi dec LEP sti $1==$4 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(DEC) -pat LEP loi ngi LEP sti $1==$4 && $2==$3 && $2==$5 && $2==WORD_SIZE - call leiuxxsei(NEG_I) -pat LEP loi com LEP sti $1==$4 && $2==$3 && 2==$5 && $2==WORD_SIZE - call leiuxxsei(NOT_I) - -proc lolcxxstl example lol loc and stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {const, $2}, {LOCAL, $1} - -/* -pat lol loc adi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(ADD_I) -pat lol loc adu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol loc sbi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(SUB_I) -pat lol loc sbu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(SUB_I) -/* -pat lol loc and stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(AND_I) -pat lol loc ior stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(OR_I) -pat lol loc xor stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(EOR_I) - peephole optimizer replaces these -*/ -#if TBL68020 || WORDSIZE==2 -#if WORD_SIZE==4 -pat lol loc dvi stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(DIVS_I) -pat lol loc dvu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(DIVU_I) -#endif -pat lol loc mli stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(MULS_I) -pat lol loc mlu stl $1==$4 && $3==WORD_SIZE && inreg($1)==reg_any - call lolcxxstl(MULU_I) -#endif - -proc lolcxxxstl example lol loc adi stl - kills all_indir, LOCAL %bd==$1 - gen xxx* {const, $2}, {LOCAL, $1} - -/* -pat lol loc adi stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(ADD_I) -pat lol loc adu stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol loc sbi stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(SUB_I) -pat lol loc sbu stl $1==$4 && $3==WORD_SIZE call lolcxxxstl(SUB_I) -/* -pat lol loc and stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(AND_I) -pat lol loc ior stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(OR_I) -pat lol loc xor stl $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_pointer - call lolcxxxstl(EOR_I) - peephole optimizer replaces these -*/ -#if WORD_SIZE==2 -proc ldlcxxxsdl example ldl ldc adi sdl - kills all_indir, DLOCAL %bd==$1 - gen xxx* {const4, $2}, {DLOCAL, $1} - -pat ldl ldc sbi sdl $1==$4 && $3==4 call ldlcxxxsdl("sub.l") -pat ldl ldc sbu sdl $1==$4 && $3==4 call ldlcxxxsdl("sub.l") -#endif - -proc lilcxxsil example lil loc and sil - kills allexceptcon - gen xxx* {const, $2}, {indirect_int, regvar($1, reg_pointer)} - -pat lil loc adi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(ADD_I) -pat lil loc adu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(ADD_I) -pat lil loc sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(SUB_I) -pat lil loc sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(SUB_I) -pat lil loc and sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(AND_I) -pat lil loc ior sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(OR_I) -pat lil loc xor sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - call lilcxxsil(EOR_I) - -proc lilcxxxsil example lil loc adi sil - kills allexceptcon -#if TBL68020 - gen xxx* {const, $2}, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* {const, $2}, {indirect_int, %a} -#endif - -pat lil loc adi sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(ADD_I) -pat lil loc adu sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(ADD_I) -pat lil loc sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(SUB_I) -pat lil loc sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(SUB_I) -pat lil loc and sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(AND_I) -pat lil loc ior sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(OR_I) -pat lil loc xor sil $1==$4 && $3==WORD_SIZE && inreg($1)!=reg_any - call lilcxxxsil(EOR_I) - -proc loecxxxste example loe loc adi ste - kills posextern - gen xxx* {const, $2}, {absolute4, $1} - -/* -pat loe loc adi ste $1==$4 && $3==WORD_SIZE call loecxxxste(ADD_I) -pat loe loc adu ste $1==$4 && $3==WORD_SIZE call loecxxxste(ADD_I) - peephole optimizer replaces these -*/ -pat loe loc sbi ste $1==$4 && $3==WORD_SIZE call loecxxxste(SUB_I) -pat loe loc sbu ste $1==$4 && $3==WORD_SIZE call loecxxxste(SUB_I) -/* -pat loe loc and ste $1==$4 && $3==WORD_SIZE call loecxxxste(AND_I) -pat loe loc ior ste $1==$4 && $3==WORD_SIZE call loecxxxste(OR_I) -pat loe loc xor ste $1==$4 && $3==WORD_SIZE call loecxxxste(EOR_I) - peephole optimizer replaces these -*/ - -proc lolrxxstl example lol lol and stl - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen xxx* {LOCAL, $2}, {LOCAL, $1} - -/* -pat lol lol adi stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(ADD_I) -pat lol lol adu stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(ADD_I) - peephole optimizer replaces these -*/ -pat lol lol sbi stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(SUB_I) -pat lol lol sbu stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(SUB_I) -/* -pat lol lol and stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(AND_I) -pat lol lol ior stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(OR_I) -pat lol lol xor stl $1==$4 && $3==WORD_SIZE - && inreg($1)==reg_any && inreg($2)==reg_any - call lolrxxstl(EOR_I) - peephole optimizer replaces these -*/ - -proc lolrxxxstl example lol lol adi stl - kills all_indir, LOCAL %bd==$1 - gen xxx* {LOCAL, $2}, {LOCAL, $1} - -/* -pat lol lol adi stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(ADD_I) -pat lol lol adu stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(ADD_I) - peephole optimizer replaces these -*/ -#if WORD_SIZE!=2 -pat lol lol ads stl $1==$4 && $3==4 && inreg($2)==reg_any - call lolrxxxstl("add.l") -#endif -pat lol lol sbi stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(SUB_I) -pat lol lol sbu stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call lolrxxxstl(SUB_I) -/* -pat lol lol and stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && inreg($1)!=reg_pointer - call lolrxxxstl(AND_I) -pat lol lol ior stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && - inreg($1)!=reg_pointer - call lolrxxxstl(OR_I) -pat lol lol xor stl $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any && - inreg($1)!=reg_pointer - call lolrxxxstl(EOR_I) - peephole optimizer replaces these -*/ - -proc lilrxxsil example lil lol and sil - kills allexceptcon - gen xxx* {LOCAL, $2}, {indirect_int, regvar($1, reg_pointer)} - -pat lil lol adi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(ADD_I) -pat lil lol adu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(ADD_I) -pat lil lol sbi sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(SUB_I) -pat lil lol sbu sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(SUB_I) -pat lil lol and sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(AND_I) -pat lil lol ior sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(OR_I) -pat lil lol xor sil $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil lol ads sil $1==$4 && $3==4 && inreg($1)==reg_pointer && - inreg($2)==reg_any - call lilrxxsil("add.l") -#endif - -proc lilrxxxsil example lil lol adi sil - kills allexceptcon -#if TBL68020 - gen xxx* {LOCAL, $2}, {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - gen xxx* {LOCAL, $2}, {indirect_int, %a} -#endif - -pat lil lol adi sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(ADD_I) -pat lil lol adu sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(ADD_I) -pat lil lol sbi sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(SUB_I) -pat lil lol sbu sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(SUB_I) -pat lil lol and sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(AND_I) -pat lil lol ior sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(OR_I) -pat lil lol xor sil $1==$4 && $3==WORD_SIZE - && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil(EOR_I) -#if WORD_SIZE!=2 -pat lil lol ads sil $1==$4 && $3==4 && inreg($2)==reg_any && inreg($1)!=reg_any - call lilrxxxsil("add.l") -#endif - -proc loerxxxste example loe lol adi ste - kills posextern - gen xxx* {LOCAL, $2}, {absolute_int, $1} - -pat loe lol adi ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(ADD_I) -pat loe lol adu ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(ADD_I) -pat loe lol sbi ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(SUB_I) -pat loe lol sbu ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(SUB_I) -pat loe lol and ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(AND_I) -pat loe lol ior ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(OR_I) -pat loe lol xor ste $1==$4 && $3==WORD_SIZE && inreg($2)==reg_any - call loerxxxste(EOR_I) -#if WORD_SIZE!=2 -pat loe lol ads ste $1==$4 && $3==4 && inreg($2)==reg_any - call loerxxxste("add.l") -#endif - -proc xxxstl example adi stl -with any_int-RD_REG-dreg_int any-RD_REG-dreg_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %2,{dreg_int, regvar($2)} - xxx* %1,{LOCAL,$2} -with exact any_int-RD_REG-dreg_int STACK - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move_i {post_inc_int, sp}, {dreg_int, regvar($2)} - xxx* %1,{LOCAL,$2} - -pat adi stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(ADD_I) -pat adu stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(ADD_I) -pat sbi stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(SUB_I) -pat sbu stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(SUB_I) -pat and stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(AND_I) -pat ior stl $1==WORD_SIZE && inreg($2)==reg_any call xxxstl(OR_I) - -pat xor stl $1==WORD_SIZE && inreg($2)==reg_any -with D_REG any_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %2,{dreg_int, regvar($2)} - eor_i %1,{dreg_int, regvar($2)} - -pat ads SLP $1==4 && inreg($2)==reg_pointer -with any4-areg-RA_REG any4+address-areg-RA_REG - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move %2,{areg,regvar($2,reg_pointer)} - add_l %1,{areg,regvar($2,reg_pointer)} -#ifdef TBL68020 -with regX any4+address-areg-RA_REG - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move %2,{areg,regvar($2,reg_pointer)} - move {regAregXcon, regvar($2,reg_pointer), %1.xreg, %1.sc, 0},{areg,regvar($2,reg_pointer)} -with exact regX STACK - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l {post_inc4, sp},{areg,regvar($2,reg_pointer)} - move {regAregXcon, regvar($2,reg_pointer), %1.xreg, %1.sc, 0},{areg,regvar($2,reg_pointer)} -with exact regX regAcon - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {regAregXcon, %2.reg, %1.xreg, %1.sc, %2.bd},{areg,regvar($2,reg_pointer)} -with exact regX local_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {regAregXcon, lb, %1.xreg, %1.sc, %2.bd},{areg,regvar($2,reg_pointer)} -#ifdef FANCY_MODES -with exact regX indirect4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg,%1.sc,0,0},{areg,regvar($2,reg_pointer)} -with exact regX offsetted4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg, %1.sc, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX LOCAL - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, lb, %1.xreg, %1.sc, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX off_con - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %2.reg, %1.xreg,%1.sc,%2.bd,%2.od},{areg,regvar($2,reg_pointer)} -with exact regX ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move{ext_regX, %1.sc, %1.xreg, %2.bd},{areg,regvar($2,reg_pointer)} -with exact regX absolute4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %1.sc, %1.xreg, %2.bd, 0},{areg,regvar($2,reg_pointer)} -with exact regX abs_con - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %1.sc, %1.xreg, %2.bd, %2.od},{areg,regvar($2,reg_pointer)} -with exact indirect4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, %1.reg, 0, %2.bd},{areg,regvar($2,reg_pointer)} -with exact offsetted4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, %1.reg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact LOCAL ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_con, lb, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact index_off4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {indoff_con, %1.reg, %1.xreg, %1.sc,%1.bd,%2.bd},{areg,regvar($2,reg_pointer)} -with exact absolute4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_con, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact abs_index4 ext_addr - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {absind_con, %1.sc, %1.xreg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact indirect4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %1.reg, %2.xreg, %2.sc, 0, %2.bd},{areg,regvar($2,reg_pointer)} -with exact offsetted4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, %1.reg, %2.xreg,%2.sc,%1.bd,%2.bd},{areg,regvar($2,reg_pointer)} -with exact LOCAL ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {off_regXcon, lb, %2.xreg, %2.sc, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -with exact absolute4 ext_regX - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move {abs_regXcon, %2.sc, %2.xreg, %1.bd, %2.bd},{areg,regvar($2,reg_pointer)} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - - -proc xxxdupstl example adi dup stl -with any_int-RD_REG-dreg_int any-RD_REG-dreg_int - kills regvar($3, reg_any), use_index %xreg==regvar($3, reg_any) - gen move %2,{dreg_int, regvar($3)} - xxx* %1,{LOCAL,$3} yields {LOCAL, $3} -with exact any_int-RD_REG-dreg_int STACK - kills regvar($3, reg_any), use_index %xreg==regvar($3, reg_any) - gen move_i {post_inc_int, sp}, {dreg_int, regvar($3)} - xxx* %1,{LOCAL,$3} yields {LOCAL, $3} - -pat adi dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(ADD_I) -pat adu dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(ADD_I) -pat sbi dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(SUB_I) -pat sbu dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(SUB_I) -pat and dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(AND_I) -pat ior dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(OR_I) -/* -pat xor dup stl $1==$2 && $2==WORD_SIZE && inreg($3)==reg_any - call xxxdupstl(EOR_I) - incorrect for eor.l !!! -*/ - -pat dup stl $1==WORD_SIZE && inreg($2)==reg_any -with any_int - kills regvar($2, reg_any), use_index %xreg==regvar($2, reg_any) - gen move %1,{dreg_int, regvar($2,reg_any)} - yields {LOCAL, $2} - -pat dup stl $1==4 && inreg($2)==reg_pointer -with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{areg, regvar($2, reg_pointer)} - yields {DLOCAL, $2} - -pat dup LLP sti LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==1 && $5==1 - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{post_inc1, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==1 && $5==1 - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{post_inc1, regvar($2,reg_pointer)} - beq {llabel, $7} - -/* Normally, LLP sti wth word size will be optimized to sil */ -pat dup LLP sti LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==2 && $5==2 - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{post_inc2, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==2 && $5==2 - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{post_inc2, regvar($2,reg_pointer)} - beq {llabel, $7} - -#if WORD_SIZE!=2 -/* m68k2 can't do zne/zeq on 4-byte */ -pat dup LLP sti LLP adp SLP zne $1==4 && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==4 && $5==4 - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{post_inc4, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP sti LLP adp SLP zeq $1==4 && inreg($2)==reg_pointer && - $2==$4 && $2==$6 && $3==4 && $5==4 - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{post_inc4, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -pat dup sil LLP adp SLP zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$3 && $3==$5 && $4==WORD_SIZE - with any_int - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_i %1,{post_inc_int, regvar($2, reg_pointer)} - bne {llabel, $6} - -pat dup sil LLP adp SLP zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$3 && $3==$5 && $4==WORD_SIZE - with any_int - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_i %1,{post_inc_int, regvar($2, reg_pointer)} - beq {llabel, $6} - -pat sil lil LLP adp SLP zne $1==$2 && $2==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - with any_int - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_i %1,{post_inc_int, regvar($1,reg_pointer)} - bne {llabel, $6} - -pat sil lil LLP adp SLP zeq $1==$2 && $2==$3 && $3==$5 && $4==WORD_SIZE - && inreg($1)==reg_pointer - with any_int - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_i %1,{post_inc_int, regvar($1,reg_pointer)} - beq {llabel, $6} - -pat dup LLP adp SLP LLP sti zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==1 && $4==(0-1) - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{pre_dec1, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP adp SLP LLP sti zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==1 && $4==(0-1) - with any1 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_b %1,{pre_dec1, regvar($2,reg_pointer)} - beq {llabel, $7} - -#if WORD_SIZE!=2 -pat dup LLP adp SLP LLP sti zne $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==2 && $4==(0-2) - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{pre_dec2, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup LLP adp SLP LLP sti zeq $1==WORD_SIZE && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==2 && $4==(0-2) - with any2 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_w %1,{pre_dec2, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -#if WORD_SIZE!=2 -pat dup lol adp stl lol sti zne $1==4 && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==4 && $4==(0-4) - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{pre_dec4, regvar($2,reg_pointer)} - bne {llabel, $7} - -pat dup lol adp stl lol sti zeq $1==4 && inreg($2)==reg_pointer && - $2==$4 && $4==$5 && $6==4 && $4==(0-4) - with any4 - kills regvar($2, reg_pointer), all_regind %reg==regvar($2, reg_pointer) - gen move_l %1,{pre_dec4, regvar($2,reg_pointer)} - beq {llabel, $7} -#endif - -pat LLP ads SLP $1==$3 && $2==4 && inreg($1)==reg_pointer - with data4-sconsts - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l %1, {DLOCAL, $1} - -pat lil dup inc sil $1==$4 && $2==WORD_SIZE && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen add_i {const, 1}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup dec sil $1==$4 && $2==WORD_SIZE && inreg($1)==reg_pointer - kills allexceptcon - uses DD_REG = {indirect_int, regvar($1, reg_pointer)} - gen sub_i {const, 1}, {indirect_int, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat LLP LFP dup adp LLP SFP sti $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {offsetted4, regvar($1, reg_pointer), $2} - gen add_l {const4, $4}, {offsetted4, regvar($1, reg_pointer), $2} - killreg %a - yields %1 %a leaving sti $7 - -pat LLP LFP dup adp LLP SFP $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {offsetted4, regvar($1, reg_pointer), $2} - gen add_l {const4, $4}, {offsetted4, regvar($1, reg_pointer), $2} - killreg %a - yields %a - -pat LLP LFP dup adp LLP SFP sti $3==4 && $1==$5 && $2==$6 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {DLOCAL, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat LLP LFP dup adp LLP SFP $3==4 && $1==$5 && $2==$6 - kills allexceptcon - uses AA_REG = {DLOCAL, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b - -pat LEP LFP dup adp LEP SFP sti $3==4 && $1==$5 && $2==$6 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat LEP LFP dup adp LEP SFP $3==4 && $1==$5 && $2==$6 - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b - -#if WORD_SIZE!=2 -pat lil lof dup adp lil stf sti $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %1 %b leaving sti $7 - -pat lil lof dup adp lil stf $3==4 && $1==$5 && $2==$6 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {offsetted4, %a, $2}, %b - add_l {const4, $4}, {offsetted4, %a, $2} - yields %b -#endif /* WORD_SIZE==2 */ - -pat LEP loi dup adp LEP sti sti $3==4 && $1==$5 && $2==4 && $6==4 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %1 %b leaving sti $7 - -pat LEP loi dup adp LEP sti $3==4 && $1==$5 && $2==4 && $6==4 - kills allexceptcon - uses AA_REG = {absolute4, $1}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %b - -#if WORD_SIZE!=2 -pat lil loi dup adp lil sti sti $3==4 && $1==$5 && $2==4 && $6==4 && $7 <= 4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %1 %b leaving sti $7 - -pat lil loi dup adp lil sti $3==4 && $1==$5 && $2==4 && $6==4 - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)}, AA_REG - gen move_l {indirect4, %a}, %b - add_l {const4, $4}, {indirect4, %a} - yields %b -#endif - -pat LLP dup adp SLP lae cmp $1==$4 && $2==4 && inreg($1)==reg_pointer && $3 < 0 - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen sub_l {const4,0-$3},{DLOCAL,$1} - yields {DLOCAL,$1} {ext_addr, $5+$3} - leaving cmu 4 - -pat LLP dup adp SLP lae cmp $1==$4 && $2==4 && inreg($1)==reg_pointer && $3 > 0 - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l {const4,$3},{DLOCAL,$1} - yields {DLOCAL,$1} {ext_addr, $5+$3} - leaving cmu 4 - -pat LLP dup adp SLP loi $1==$4 && $2==4 && $3==4 && $5==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc4, regvar($1, reg_pointer)} - -pat LLP dup adp SLP loi $1==$4 && $2==4 && $3==$5 && inreg($1)==reg_pointer - leaving LLP $1 loi $5 LLP $4 adp $3 SLP $4 - -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc1, regvar($1, reg_pointer)} - -/* Normally, LLP loi will be optimized to lil */ -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc2, regvar($1, reg_pointer)} - -pat LLP loi LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc4, regvar($1, reg_pointer)} - -pat lil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {post_inc_int, regvar($1, reg_pointer)} - -pat LLP dup adp SLP sti $1==$4 && $2==4 && $3==$5 && inreg($1)==reg_pointer - leaving LLP $1 sti $5 LLP $4 adp $3 SLP $4 - -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 && - inreg($1)==reg_pointer -with any1 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc1, regvar($1, reg_pointer)} - -/* Normally, LLP sti will ve optimzed into sil */ -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 && - inreg($1)==reg_pointer -with any2 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc2, regvar($1, reg_pointer)} - -pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 && - inreg($1)==reg_pointer -with any4 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc4, regvar($1, reg_pointer)} - -pat LLP dup adp SLP sti $1==$4 && $2==4 && $3==WORD_SIZE && $5==WORD_SIZE && - inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc_int, regvar($1, reg_pointer)} - -pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {post_inc_int, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec1, regvar($1, reg_pointer)} - -/* Normally, LLP loi will be optimized to lil */ -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-2 && $5==2 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec2, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-4 && $5==4 && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec4, regvar($1, reg_pointer)} - -pat LLP adp SLP lil $1==$3 && $1==$4 && $2==0-WORD_SIZE && - inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - yields {pre_dec_int, regvar($1, reg_pointer)} - -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 && - inreg($1)==reg_pointer -with any1 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec1, regvar($1, reg_pointer)} - -#if WORD_SIZE!=2 -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 && - inreg($1)==reg_pointer -with any2 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec2, regvar($1, reg_pointer)} -#else -pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 && - inreg($1)==reg_pointer -with any4 - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec4, regvar($1, reg_pointer)} -#endif - -pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE && - inreg($1)==reg_pointer -with any_int-sconsts - kills allexceptcon, regvar($1, reg_pointer) - gen move %1, {pre_dec_int, regvar($1, reg_pointer)} - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer && directadd($3) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1} - gen add_l {const4, $3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer && directsub($3) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1} - gen sub_l {const4, 0-$3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3} - gen add_l %b, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && directadd($3) - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1} - gen add_l {const4, $3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 && directsub($3) - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1} - gen sub_l {const4, 0-$3}, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP dup adp SLP $1==$4 && $2==4 - kills all_indir, DLOCAL %bd==$1 - uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3} - gen add_l %b, {DLOCAL, $1} - killreg %a - yields %a - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen add_l {const4, $2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2) - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen sub_l {const4, 0-$2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - uses DD_REG4 = {const4, $2} - gen add_l %a, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && directadd($2) - kills all_indir, DLOCAL %bd==$1 - gen add_l {const4, $2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 && directsub($2) - kills all_indir, DLOCAL %bd==$1 - gen sub_l {const4, 0-$2}, {DLOCAL, $1} - -pat LLP adp SLP $1==$3 - kills all_indir, DLOCAL %bd==$1 - uses DD_REG4 = {const4, $2} - gen add_l %a, {DLOCAL, $1} - -#if WORD_SIZE!=2 -pat lil dup adp sil sti $1==$4 && $2==4 && inreg($1)==reg_pointer && $5<=4 - with conreg - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)} - gen add_l {const, $3}, {indirect4, regvar($1, reg_pointer)} - killreg %a - yields %1 %a leaving sti $5 - -pat lil dup adp sil $1==$4 && $2==4 && inreg($1)==reg_pointer - kills allexceptcon - uses AA_REG = {indirect4, regvar($1, reg_pointer)} - gen add_l {const, $3}, {indirect4, regvar($1, reg_pointer)} - killreg %a - yields %a - -pat lil dup adp sil $1==$4 && $2==4 - kills allexceptcon - uses AA_REG, AA_REG = {LOCAL, $1} - gen move {indirect4, %b}, %a - add_l {const, $3}, {indirect4, %b} - killreg %a - yields %a - -pat lil adp sil $1==$3 && inreg($1)==reg_pointer - kills allexceptcon - gen add_l {const, $2}, {indirect4, regvar($1, reg_pointer)} - -pat lil adp sil $1==$3 && inreg($1)!=reg_any - kills allexceptcon -#if TBL68020 /* WORD_SIZE==4 */ - gen add_l {const, $2}, {ILOCAL,$1} -#else - uses AA_REG = {LOCAL, $1} - gen add_l {const, $2}, {indirect4, %a} -#endif -#endif /* WORD_SIZE==2 */ - -pat LEP dup adp SEP $1==$4 && $2==4 - kills posextern - uses AA_REG = {absolute4, $1} - gen add_l {const4, $3}, {absolute4, $1} - killreg %a - yields %a - -pat LEP adp SEP $1==$3 - kills posextern - gen add_l {const4, $2}, {absolute4, $1} - -pat loc and $1==255 && $2==WORD_SIZE -#if WORD_SIZE==2 - with exact absolute_int yields {absolute1,%1.bd+1} - with exact offsetted_int yields {offsetted1,%1.reg,%1.bd+1} - with exact LOCAL yields {offsetted1,lb,%1.bd+1} -#else - with exact absolute_int yields {absolute1,%1.bd+3} - with exact offsetted_int yields {offsetted1,%1.reg,%1.bd+3} - with exact LOCAL yields {offsetted1,lb,%1.bd+3} -#endif - with yields {const, $1} leaving and WORD_SIZE - -/************************************************ - * Group 1: load instructions * - ************************************************/ - -pat loc $1==0 yields {zero_const, $1} - -pat loc small($1) yields {small_const, $1} - -pat loc in_1($1) yields {bconst, $1} - -pat loc yields {const, $1} - -#if WORD_SIZE!=2 -pat ldc leaving loc 18 trp -#else -pat ldc highw($1)==0 && loww($1)==0 yields {zero_const4, 0} - -pat ldc highw($1)==0 && small(loww($1)) yields {small_const4, loww($1)} - -pat ldc highw($1)==0 && in_1(loww($1)) yields {bconst4, loww($1)} - -pat ldc yields {const4, $1} -#endif - -pat LLP inreg($1)==reg_pointer - kills pre_post %reg==regvar($1, reg_pointer) - yields {DLOCAL, $1} - -pat lol yields {LOCAL, $1} - -#if WORD_SIZE!=2 -pat ldl leaving lol $1+4 lol $1 -#else -pat ldl yields {DLOCAL, $1} -#endif - -pat loe yields {absolute_int, $1} - -/* replace ste loe by dup ste, but not if followed by a test ... */ -proc steloezxx example ste loe zne -with any_int-sconsts - kills posextern - gen move_i %1, {absolute_int, $1} - bxx* {llabel, $3} -with exact STACK - kills posextern - gen move_i {post_inc_int, sp}, {absolute_int, $1} - bxx* {llabel, $3} - -pat ste loe zlt $1==$2 call steloezxx("blt") -pat ste loe zle $1==$2 call steloezxx("ble") -pat ste loe zeq $1==$2 call steloezxx("beq") -pat ste loe zne $1==$2 call steloezxx("bne") -pat ste loe zge $1==$2 call steloezxx("bge") -pat ste loe zgt $1==$2 call steloezxx("bgt") - -pat ste loe $1==$2 leaving dup WORD_SIZE ste $1 - -pat lil inreg($1)==reg_pointer - kills pre_post %reg==regvar($1, reg_pointer) - yields {indirect_int, regvar($1, reg_pointer)} -#if WORD_SIZE==4 -pat lil inreg($1)==reg_any - uses AA_REG = {DLOCAL, $1} - yields {indirect_int, %a} -#endif - -pat lil -#if TBL68020 - yields {ILOCAL, $1} -#else - uses AA_REG = {DLOCAL, $1} - yields {indirect_int, %a} -#endif - - /* When using the 'offsetted' intructions regAregXcon cannot be used - * for the m68k[24]; there is no way of knowing about the size of - * %1.bd+$1, because expressions are not allowed in stack patterns, and - * this may lead to outputting too large displacements. With regAcon - * the chance that this will happen is very slim, because it can - * have displacements of 16 bits. Besides, leaving out regAcon here - * would make it very hard to handle this instruction efficiently. - */ -pat lof -with A_REG yields {offsetted_int, %1, $1} -with exact local_addr yields {LOCAL, %1.bd+$1} -with exact ext_addr yields {absolute_int, %1.bd+$1} -#ifndef TBL68020 -with regAcon yields {offsetted_int, %1.reg, %1.bd+$1} -#else /* TBL68020 */ -with exact regAcon yields {offsetted_int, %1.reg, %1.bd+$1} -with exact regAregXcon yields {index_off_int, %1.reg, %1.xreg, %1.sc, %1.bd+$1} -#ifdef FANCY_MODES -with exact offsetted4 yields {OFF_off_int, %1.reg, %1.bd, $1} -with exact indirect yields {OFF_off_int, %1.reg, 0, $1} -with exact DLOCAL yields {OFF_off_int, lb, %1.bd, $1} -with exact off_con yields {OFF_off_int, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 yields {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con yields {INDOFF_off_int, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon yields {OFF_indoff_int, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 yields {ABS_off_int, %1.bd, $1} -with exact abs_con yields {ABS_off_int, %1.bd, %1.od+$1} -with exact abs_regXcon yields {ABS_indoff_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 yields {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con yields {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX yields {abs_index_int, %1.sc, %1.xreg, %1.bd+$1} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat lal yields {local_addr, $1} - -pat lae yields {ext_addr, $1} - -pat lxl $1==0 yields lb - -pat lxl $1==1 yields {DLOCAL, SL} - -pat lxl $1==2 -#if TBL68020 && FANCY_MODES - yields {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - yields {offsetted4, %a, SL} -#endif - -pat lxl $1==3 -#if TBL68020 && FANCY_MODES - uses AA_REG = {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - gen move_l {offsetted4, %a, SL}, %a -#endif - yields {offsetted4, %a, SL} - -pat lxl $1>3 - uses AA_REG = {DLOCAL, SL}, - DD_REG4 = {const, $1-2} - gen 1: - move_l {offsetted4, %a, SL} ,%a - dbf %b, {slabel, 1b} - yields %a - -pat lxa $1==0 yields {local_addr, SL} - -pat lxa $1==1 -#if TBL68020 && FANCY_MODES - yields {off_con, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - yields {regAcon, %a, SL} -#endif - -pat lxa $1==2 -#if TBL68020 && FANCY_MODES - uses AA_REG = {OFF_off4, lb, SL, SL} -#else - uses AA_REG = {DLOCAL, SL} - gen move_l {offsetted4, %a, SL}, %a -#endif - yields {regAcon, %a, SL} - -pat lxa $1>2 - uses AA_REG = {DLOCAL, SL}, - DD_REG4 = {const, $1-2} - gen 1: - move_l {offsetted4, %a, SL} ,%a - dbf %b, {slabel, 1b} - yields {regAcon, %a, SL} - -pat loi $1==1 -with A_REG yields {indirect1, %1} -with exact local_addr yields {offsetted1, lb, %1.bd} -with exact ext_addr yields {absolute1, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted1, %1.reg, %1.bd} -with regAregXcon yields {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted1, %1.reg, %1.bd} -with exact regAregXcon yields {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off1, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off1, %1.reg, %1.bd, 0} -with exact LOCAL yields {OFF_off1, lb, %1.bd, 0} -with exact off_con yields {OFF_off1, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off1, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff1, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off1, %1.bd, 0} -with exact abs_con yields {ABS_off1, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off1, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index1, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat loi $1==2 -with A_REG yields {indirect2, %1} -#if WORD_SIZE!=2 -with exact local_addr yields {offsetted2, lb, %1.bd} -#else -with exact local_addr yields {LOCAL, %1.bd} -#endif -with exact ext_addr yields {absolute2, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted2, %1.reg, %1.bd} -with regAregXcon yields {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted2, %1.reg, %1.bd} -with exact regAregXcon yields {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==2 -with exact DLOCAL yields {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off2, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off2, %1.reg, %1.bd, 0} -with exact LOCAL yields {OFF_off2, lb, %1.bd, 0} -with exact off_con yields {OFF_off2, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off2, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff2, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off2, %1.bd, 0} -with exact abs_con yields {ABS_off2, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off2, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index2, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat loi $1==4 -with A_REG yields {indirect4, %1} -with exact local_addr yields {DLOCAL, %1.bd} -with exact ext_addr yields {absolute4, %1.bd} -#ifndef TBL68020 -with regAcon yields {offsetted4, %1.reg, %1.bd} -with regAregXcon yields {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon yields {offsetted4, %1.reg, %1.bd} -with exact regAregXcon yields {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==4 -with exact LOCAL yields {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 yields {OFF_off4, %1.reg, 0, 0} -with exact offsetted4 yields {OFF_off4, %1.reg, %1.bd, 0} -with exact off_con yields {OFF_off4, %1.reg, %1.bd, %1.od} -with exact index_off4 yields {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con yields {INDOFF_off4, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon yields {OFF_indoff4, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 yields {ABS_off4, %1.bd, 0} -with exact abs_con yields {ABS_off4, %1.bd, %1.od} -with exact abs_regXcon yields {ABS_indoff4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 yields {ABSIND_off4, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con yields {ABSIND_off4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX yields {abs_index4, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat loi $1==6 -with AA_REG - yields {offsetted2, %1, 4} {indirect4, %1} -with exact local_addr - yields {offsetted2, lb, %1.bd+4} {offsetted4, lb, %1.bd} -with exact ext_addr - yields {absolute2, %1.bd + 4} {absolute4, %1.bd} -#endif - -pat loi $1==8 -#if WORD_SIZE!=2 - leaving ldf 0 -#else -with AA_REG - yields {offsetted4, %1, 4} {indirect4, %1} -with exact local_addr - yields {offsetted4, lb, %1.bd+4} {offsetted4, lb, %1.bd} -with exact ext_addr - yields {absolute4, %1.bd + 4} {absolute4, %1.bd} -#endif - -#if WORD_SIZE==4 -pat loi $1==3*WORD_SIZE -with AA_REG STACK - kills ALL - uses DD_REG4={const,$1} - gen add_l %a, %1 - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - -pat loi $1==4*WORD_SIZE -with AA_REG STACK - kills ALL - uses DD_REG4={const4,$1} - gen add_l %a, %1 - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} - move_i {pre_dec_int, %1},{pre_dec_int, sp} -#endif - -pat loi $1>4*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG STACK - kills ALL - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen add_l {const4, $1}, %1 - 1: - move_i {pre_dec_int, %1}, {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat loi -with STACK - kills ALL - gen move_i {const,$1},{pre_dec_int, sp} - jsr {absolute4, ".los"} - -pat los $1==WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".los"} -#if WORD_SIZE==2 -pat los $1==4 -with STACK - kills ALL - gen jsr {absolute4, ".los4"} -#endif - -pat lde -#if WORD_SIZE==2 - yields {absolute4, $1} -#else - yields {absolute4, $1+4} - {absolute4, $1} -#endif - -pat ldf -#if WORD_SIZE==2 -with A_REG yields {offsetted4, %1, $1} -with exact local_addr yields {DLOCAL, %1.bd+$1} -with regAcon yields {offsetted4, %1.reg, %1.bd+$1} -#else -with A_REG yields {offsetted4, %1, $1+4} - {offsetted4, %1, $1} -with exact local_addr yields {LOCAL, %1.bd+$1+4} - {LOCAL, %1.bd+$1} -with regAcon yields {offsetted4, %1.reg, %1.bd+$1+4} - {offsetted4, %1.reg, %1.bd+$1} -#endif - -pat lpi yields {ext_addr, $1} - -/************************************************ - * Group 2: store instructions * - ************************************************/ - -pat stl inreg($1)==reg_any -with exact memory1-consts - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - move_b %1, {dreg1, regvar($1,reg_any)} -#if WORD_SIZE==2 -with any2 - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move %1, {LOCAL, $1} -#else -with exact memory2-consts - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - move_w %1, {dreg2, regvar($1,reg_any)} -with store4 - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move %1, {LOCAL, $1} -#endif -with exact STACK - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen move_i {post_inc_int, sp}, {LOCAL, $1} - -pat SLP inreg($1)==reg_pointer -with any4 -#if WORD_SIZE!=2 - -sconsts4 -#endif - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move %1, {areg, regvar($1, reg_pointer)} -with exact ext_addr - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_l %1, {areg, regvar($1, reg_pointer)} -with address-ext_addr - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen lea %1, {areg, regvar($1, reg_pointer)} -with exact STACK - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move_l {post_inc4, sp}, {areg, regvar($1, reg_pointer)} - -pat stl -with store_int-sconsts - kills all_indir, LOCAL %bd==$1 - gen move %1, {LOCAL, $1} -with exact STACK - kills all_indir, LOCAL %bd==$1 - gen move_i {post_inc_int,sp}, {LOCAL, $1} - -pat ste -with store_int-sconsts - kills posextern - gen move %1, {absolute_int, $1} -with exact STACK - kills posextern - gen move_i {post_inc_int, sp}, {absolute_int, $1} - -pat sil inreg($1)==reg_pointer -with store_int-sconsts - kills allexceptcon - gen move %1, {indirect_int, regvar($1, reg_pointer)} -with exact STACK - kills allexceptcon - gen move_i {post_inc_int, sp}, {indirect_int, regvar($1, reg_pointer)} - -#if WORD_SIZE==4 -pat sil inreg($1)==reg_any -with store_int-sconsts - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move %1, {indirect_int, %a} -with exact STACK - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move_i {post_inc_int, sp}, {indirect_int, %a} -#endif - -pat sil -#if TBL68020 -with store_int-sconsts - kills allexceptcon - gen move %1, {ILOCAL, $1} -with exact STACK - kills allexceptcon - gen move_i {post_inc_int, sp}, {ILOCAL, $1} -#else -with store_int-sconsts - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move %1, {indirect_int, %a} -with exact STACK - kills allexceptcon - uses AA_REG = {DLOCAL, $1} - gen move_i {post_inc_int, sp}, {indirect_int, %a} -#endif - -pat stf -with A_REG store_int-sconsts - kills allexceptcon - gen move %2, {offsetted_int, %1, $1} -with exact any4 STACK - kills allexceptcon - uses AA_REG = %1 - gen move_i {post_inc_int, sp}, {offsetted_int, %a, $1} -with exact STACK - kills allexceptcon - uses AA_REG - gen move_l {post_inc4, sp}, %a - move_i {post_inc_int, sp}, {offsetted_int, %a, $1} -with exact local_addr store_int - kills allexceptcon - gen move %2, {LOCAL, %1.bd+$1} -with exact ext_addr store_int - kills allexceptcon - gen move %2, {absolute_int, %1.bd+$1} -#if TBL68000 -#if WORD_SIZE==4 -with regAcon store_int - kills allexceptcon - gen move %2, {offsetted_int, %1.reg, %1.bd+$1} -#endif -#else /* TBL68020 */ -with exact regAcon store_int - kills allexceptcon - gen move %2, {offsetted_int, %1.reg, %1.bd+$1} -with exact regAregXcon store_int - kills allexceptcon - gen move %2, {index_off_int, %1.reg, %1.xreg, %1.sc, %1.bd+$1} -#ifdef FANCY_MODES -with exact indirect4 store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, 0, $1} -with exact offsetted4 store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, %1.bd, $1} -with exact DLOCAL store_int - kills allexceptcon - gen move %2, {OFF_off_int, lb, %1.bd, $1} -with exact off_con store_int - kills allexceptcon - gen move %2, {OFF_off_int, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 store_int - kills allexceptcon - gen move %2, {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con store_int - kills allexceptcon - gen move %2, {INDOFF_off_int, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon store_int - kills allexceptcon - gen move %2, {OFF_indoff_int, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 store_int - kills allexceptcon - gen move %2, {ABS_off_int, %1.bd, $1} -with exact abs_con store_int - kills allexceptcon - gen move %2, {ABS_off_int, %1.bd, %1.od+$1} -with exact abs_regXcon store_int - kills allexceptcon - gen move %2, {ABS_indoff_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 store_int - kills allexceptcon - gen move %2, {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con store_int - kills allexceptcon - gen move %2, {ABSIND_off_int, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX store_int - kills allexceptcon - gen move %2, {abs_index_int, %1.sc, %1.xreg, %1.bd+$1} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==1 -with A_REG any1 - kills allexceptcon - gen move %2, {indirect1, %1} -with local_addr any1 - kills allexceptcon - gen move %2, {offsetted1, lb, %1.bd} -with exact ext_addr any1 - kills allexceptcon - gen move %2, {absolute1, %1.bd} -#ifndef TBL68020 -with regAcon any1 - kills allexceptcon - gen move %2, {offsetted1, %1.reg, %1.bd} -with regAregXcon any1 - kills allexceptcon - gen move %2, {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon any1 - kills allexceptcon - gen move %2, {offsetted1, %1.reg, %1.bd} -with exact regAregXcon any1 - kills allexceptcon - gen move %2, {index_off1, %1.reg, %1.xreg, %1.sc, %1.bd} -#ifdef FANCY_MODES -with exact indirect4 any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, 0, 0} -with exact offsetted4 any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, %1.bd, 0} -with exact LOCAL any1 - kills allexceptcon - gen move %2, {OFF_off1, lb, %1.bd, 0} -with exact off_con any1 - kills allexceptcon - gen move %2, {OFF_off1, %1.reg, %1.bd, %1.od} -with exact index_off4 any1 - kills allexceptcon - gen move %2, {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con any1 - kills allexceptcon - gen move %2, {INDOFF_off1, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon any1 - kills allexceptcon - gen move %2, {OFF_indoff1, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 any1 - kills allexceptcon - gen move %2, {ABS_off1, %1.bd, 0} -with exact abs_con any1 - kills allexceptcon - gen move %2, {ABS_off1, %1.bd, %1.od} -with exact abs_regXcon any1 - kills allexceptcon - gen move %2, {ABS_indoff1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 any1 - kills allexceptcon - gen move %2, {ABSIND_off1, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con any1 - kills allexceptcon - gen move %2, {ABSIND_off1, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX any1 - kills allexceptcon - gen move %2, {abs_index1, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==2 -with A_REG any2 - kills allexceptcon - gen move %2, {indirect2, %1} -with local_addr any2 - kills allexceptcon - gen move %2, {offsetted2, lb, %1.bd} -with exact ext_addr any2 - kills allexceptcon - gen move %2, {absolute2, %1.bd} -#ifndef TBL68020 -with regAcon any2 - kills allexceptcon - gen move %2, {offsetted2, %1.reg, %1.bd} -with regAregXcon any2 - kills allexceptcon - gen move %2, {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon any2 - kills allexceptcon - gen move %2, {offsetted2, %1.reg, %1.bd} -with exact regAregXcon any2 - kills allexceptcon - gen move %2, {index_off2, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==2 -with exact DLOCAL any2 - kills allexceptcon - gen move %2, {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, 0, 0} -with exact offsetted4 any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, %1.bd, 0} -with exact LOCAL any2 - kills allexceptcon - gen move %2, {OFF_off2, lb, %1.bd, 0} -with exact off_con any2 - kills allexceptcon - gen move %2, {OFF_off2, %1.reg, %1.bd, %1.od} -with exact index_off4 any2 - kills allexceptcon - gen move %2, {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con any2 - kills allexceptcon - gen move %2, {INDOFF_off2, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon any2 - kills allexceptcon - gen move %2, {OFF_indoff2, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 any2 - kills allexceptcon - gen move %2, {ABS_off2, %1.bd, 0} -with exact abs_con any2 - kills allexceptcon - gen move %2, {ABS_off2, %1.bd, %1.od} -with exact abs_regXcon any2 - kills allexceptcon - gen move %2, {ABS_indoff2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 any2 - kills allexceptcon - gen move %2, {ABSIND_off2, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con any2 - kills allexceptcon - gen move %2, {ABSIND_off2, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX any2 - kills allexceptcon - gen move %2, {abs_index2, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -pat sti $1==4 -with A_REG store4-sconsts4 - kills allexceptcon - gen move %2, {indirect4, %1} -with exact any4 STACK - kills allexceptcon - uses AA_REG = %1 - gen move_l {post_inc4, sp}, {indirect4, %a} -with exact STACK - kills allexceptcon - uses AA_REG - gen move_l {post_inc4, sp}, %a - move_l {post_inc4, sp}, {indirect4, %a} -with exact local_addr store4 - kills allexceptcon - gen move %2, {DLOCAL, %1.bd} -with exact ext_addr store4 - kills allexceptcon - gen move %2, {absolute4, %1.bd} -#ifndef TBL68020 -with regAcon store4-sconsts4 - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd} -with regAregXcon store4-sconsts4 - kills allexceptcon - gen move %2, {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#else /* TBL68020 */ -with exact regAcon store4 - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd} -with exact regAregXcon store4 - kills allexceptcon - gen move %2, {index_off4, %1.reg, %1.xreg, %1.sc, %1.bd} -#if WORD_SIZE==4 -with exact LOCAL store4 - kills allexceptcon - gen move %2, {ILOCAL, %1.bd} -#endif -#ifdef FANCY_MODES -with exact indirect4 store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, 0, 0} -with exact offsetted4 store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, %1.bd, 0} -with exact off_con store4 - kills allexceptcon - gen move %2, {OFF_off4, %1.reg, %1.bd, %1.od} -with exact index_off4 store4 - kills allexceptcon - gen move %2, {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, 0} -with exact indoff_con store4 - kills allexceptcon - gen move %2, {INDOFF_off4, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact off_regXcon store4 - kills allexceptcon - gen move %2, {OFF_indoff4, %1.reg, %1.xreg, %1.sc, %1.bd, %1.od} -with exact absolute4 store4 - kills allexceptcon - gen move %2, {ABS_off4, %1.bd, 0} -with exact abs_con store4 - kills allexceptcon - gen move %2, {ABS_off4, %1.bd, %1.od} -with exact abs_regXcon store4 - kills allexceptcon - gen move %2, {ABS_indoff4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact abs_index4 store4 - kills allexceptcon - gen move %2, {ABSIND_off4, %1.sc, %1.xreg, %1.bd, 0} -with exact absind_con store4 - kills allexceptcon - gen move %2, {ABSIND_off4, %1.sc, %1.xreg, %1.bd, %1.od} -with exact ext_regX store4 - kills allexceptcon - gen move %2, {abs_index4, %1.sc, %1.xreg, %1.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat sti $1==6 -with A_REG any4 any2 - kills ALL - gen move %2, {indirect4, %1} - move %3, {offsetted2, %1, 4} -with AA_REG any4 any2 - kills ALL - gen move %2, {post_inc4, %1} - move %3, {post_inc2, %1} -with exact A_REG STACK - kills ALL - gen move_l {post_inc4, sp}, {indirect4, %1} - move_w {post_inc2, sp}, {offsetted2, %1, 4} -with exact AA_REG STACK - kills ALL - gen move_l {post_inc4, sp}, {post_inc4, %1} - move_w {post_inc2, sp}, {post_inc2, %1} -#endif - -pat sti $1==8 -#if WORD_SIZE!=2 - leaving sdf 0 -#else -with AA_REG any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{indirect4, %1} - move_l %3,{offsetted4, %1, 4} -with exact local_addr any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{offsetted4, lb, %1.bd} - move_l %3,{offsetted4, lb, %1.bd+4} -with exact ext_addr any4-pre_post any4-pre_post - kills ALL - gen move_l %2,{absolute4, %1.bd} - move_l %3,{absolute4, %1.bd+4} -#endif - - -#if WORD_SIZE==4 -pat sti $1==3*WORD_SIZE - with AA_REG STACK - kills ALL - gen move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - -pat sti $1==4*WORD_SIZE - with AA_REG STACK - kills ALL - gen move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} - move_i {post_inc_int, sp},{post_inc_int,%1} -#endif - -pat sti $1>4*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG STACK - kills ALL - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - move_i {post_inc_int, sp}, {post_inc_int, %1} - dbf %a, {slabel, 1b} - -pat sti -with STACK - kills ALL - gen move_i {const, $1}, {pre_dec_int, sp} - jsr {absolute4, ".sts"} - -pat sts $1==WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".sts"} -#if WORD_SIZE==2 -pat sts $1==4 -with STACK - kills ALL - gen jsr {absolute4, ".sts4"} -#endif - -#if WORD_SIZE==2 -pat sdl -with store4-sconsts4 - kills all_indir, DLOCAL %bd==$1 - gen move %1, {DLOCAL, $1} -with exact STACK - kills all_indir, DLOCAL %bd==$1 - gen move_l {post_inc4,sp}, {DLOCAL, $1} -#else -pat sdl -with any4-sconsts any4-sconsts - kills all_indir, LOCAL %bd==$1 - gen move %1, {LOCAL, $1} - move %2, {LOCAL, $1+4} -#if TBL68881 -with exact FD_REG - kills all_indir, LOCAL %bd==$1 - gen fmove_d %1, {LOCAL, $1} -#endif -with exact STACK - kills all_indir, LOCAL %bd==$1 - gen move_l {post_inc4, sp}, {LOCAL,$1} - move_l {post_inc4, sp}, {LOCAL,$1+4} -#endif /* WORD_SIZE==2 */ - -pat sde -#if WORD_SIZE==2 -with any4-sconsts4 - kills posextern - gen move_l %1, {absolute4, $1} -with exact STACK - kills posextern - gen move_l {post_inc4, sp}, {absolute4, $1} -#else -with any4-sconsts any4-sconsts - kills posextern - gen move %1, {absolute4, $1} - move %2, {absolute4, $1+4} -#if TBL68881 -with exact FD_REG - kills posextern - gen fmove_d %1, {absolute4, $1} -#endif -with exact STACK - kills posextern - gen move_l {post_inc4, sp}, {absolute4,$1} - move_l {post_inc4, sp}, {absolute4,$1+4} -#endif - -pat sdf -#if WORD_SIZE==2 -with A_REG any4-sconsts4 - kills allexceptcon - gen move_l %2, {offsetted4, %1, $1} -with exact A_REG STACK - kills allexceptcon - gen move_l {post_inc4, sp}, {offsetted4, %1, $1} -#else -with A_REG any4-sconsts any4-sconsts - kills allexceptcon - gen move %2, {offsetted4, %1, $1} - move %3, {offsetted4, %1, $1+4} -with exact local_addr any4 any4 - kills allexceptcon - gen move %2, {LOCAL, %1.bd+$1} - move %3, {LOCAL, %1.bd+$1+4} -with regAcon any4-sconsts any4-sconsts - kills allexceptcon - gen move %2, {offsetted4, %1.reg, %1.bd+$1} - move %3, {offsetted4, %1.reg, %1.bd+$1+4} -#endif - - - -/************************************************ - * Group 3: integer arithmetic. * - ************************************************/ - -#if WORD_SIZE==2 -pat adi $1==2 -with any2-bconst DD_REG - gen add_w %1, %2 yields %2 -with DD_REG any2-DD_REG-bconst - gen add_w %2, %1 yields %1 -with exact any2 STACK - uses reusing %1,DD_REG=%1 - gen add_w {post_inc2, sp}, %a - yields %a -#endif - -pat adi $1==4 -with any4-bconst4 DD_REG4 - gen add_l %1, %2 yields %2 -with DD_REG4 any4-DD_REG4-bconst4 - gen add_l %2, %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen add_l {post_inc4, sp}, %a - yields %a - -#if WORD_SIZE==2 -pat sbi $1==2 -with any2-bconst DD_REG - gen sub_w %1, %2 yields %2 -with DD_REG any2-DD_REG-bconst - gen sub_w %2, %1 - neg_w %1 yields %1 -with exact any2 STACK - uses reusing %1,DD_REG=%1 - gen sub_w {post_inc2, sp}, %a - neg_w %a yields %a -#endif - -pat sbi $1==4 -with any4-bconst4 DD_REG4 - gen sub_l %1, %2 yields %2 -with DD_REG4 any4-DD_REG4-bconst4 - gen sub_l %2, %1 - neg_l %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen sub_l {post_inc4, sp}, %a - neg_l %a yields %a -with any4-bconst4 AA_REG - gen sub_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat loc loc cii ldc mli $1==2 && $2==4 && highw($4)==0 && loww($4)>0 && $5==4 -with any2-pre_post - uses reusing %1, DD_REG4 - gen move %1, %a.1 - muls_w {const, loww($4)}, %a.1 - yields %a - -pat mli $1==2 -with any2-pre_post any2-pre_post - uses reusing %2,DD_REG = %2 - gen muls_w %1, %a yields %a -#endif - -pat mli $1==4 -#ifdef TBL68020 -with data4 DD_REG4 - gen muls_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".mli"} - yields dl1 -#endif - -#if WORD_SIZE==2 -pat dvi $1==2 -with data2-sconsts DD_REG - gen ext_l %2 - divs_w %1, %2 - yields %2 -#endif - -pat dvi $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen divs_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvi"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat rmi $1==2 -with data2-sconsts DD_REG - gen ext_l %2 - divs_w %1, %2 - swap %2 - killreg %2 - yields %2 -#endif - -pat rmi $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - uses DD_REG4 - gen divsl_l %1, {DREG_pair, %a, %2} - killreg %2 - /* !!!! contents of %2 have changed: make this known to cg */ - yields %a -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvi"} - yields dl2 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat ngi $1==2 -with DD_REG - gen neg_w %1 yields %1 -#endif - -pat ngi $1==4 -with DD_REG4 - gen neg_l %1 yields %1 - -#if WORD_SIZE==2 -pat sli $1==2 -with shconreg DD_REG - gen asl_w %1, %2 yields %2 -#endif - -pat sli $1==4 -with shconreg DD_REG4 - gen asl_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat sri $1==2 -with shconreg DD_REG - gen asr_w %1, %2 yields %2 -#endif - -pat sri $1==4 -with shconreg DD_REG4 - gen asr_l %1, %2 yields %2 - -/************************************************ - * Group 4: unsigned arithmetic. * - ************************************************/ - -pat adu leaving adi $1 - -pat sbu leaving sbi $1 - -#if WORD_SIZE==2 -pat mlu $1==2 -with any2-pre_post any2-pre_post - uses reusing %2,DD_REG = %2 - gen mulu_w %1, %a yields %a -#endif - -pat mlu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen mulu_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".mlu"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat dvu $1==2 -with data2-sconsts data2 - uses DD_REG4 = {zero_const4,0} - gen move %2,%a.1 - divu_w %1, %a.1 yields %a.1 -#endif - -pat dvu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - gen divu_l %1, %2 yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvu"} - yields dl1 -#endif /* TBL68020 */ - -#if WORD_SIZE==2 -pat rmu $1==2 -with data2-sconsts data2 - uses DD_REG4 = {zero_const4, 0} - gen move %2,%a.1 - divu_w %1, %a.1 - swap %a.1 - killreg %a - yields %a.1 -#endif - -pat rmu $1==4 -#ifdef TBL68020 -with data4-sconsts4 DD_REG4 - uses DD_REG4 - gen divul_l %1, {DREG_pair, %a, %2} - killreg %2 - /* !!!! contents of %2 have changed: make this known to cg */ - yields %a -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".dvu"} - yields dl2 -#endif /* TBL68020 */ - -pat slu leaving sli $1 - -#if WORD_SIZE==2 -pat sru $1==2 -with shconreg DD_REG - gen lsr_w %1, %2 yields %2 -#endif - -pat sru $1==4 -with shconreg DD_REG4 - gen lsr_l %1, %2 yields %2 - -/************************************************ - * Group 5: floating point arithmetic * - ************************************************/ - -/* Floating point stuff - * Arithmetic instructions - */ - -#if TBL68881 -pat adf stl $1==4 - with FS_REG STACK - gen fadd_s {post_inc4,sp},%1 yields %1 leaving stl $2 -pat adf sdl $1==8 - with FD_REG STACK - gen fadd_d {post_inc4,sp},%1 yields %1 leaving sdl $2 -pat sbf stl $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 yields %2 leaving stl $2 -pat sbf sdl $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 yields %2 leaving sdl $2 -pat mlf stl $1==4 - with FS_REG STACK - gen fmul_s {post_inc4,sp},%1 yields %1 leaving stl $2 -pat mlf sdl $1==8 - with FD_REG STACK - gen fmul_d {post_inc4,sp},%1 yields %1 leaving sdl $2 -pat dvf stl $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 yields %2 leaving stl $2 -pat dvf sdl $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 yields %2 leaving sdl $2 -pat ngf stl $1==4 - with FS_REG STACK - gen fneg %1 yields %1 leaving stl $2 -pat ngf sdl $1==8 - with FD_REG STACK - gen fneg %1 yields %1 leaving sdl $2 - -pat adf ste $1==4 - with FS_REG STACK - gen fadd_s {post_inc4,sp},%1 yields %1 leaving ste $2 -pat adf sde $1==8 - with FD_REG STACK - gen fadd_d {post_inc4,sp},%1 yields %1 leaving sde $2 -pat sbf ste $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 yields %2 leaving ste $2 -pat sbf sde $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 yields %2 leaving sde $2 -pat mlf ste $1==4 - with FS_REG STACK - gen fmul_s {post_inc4,sp},%1 yields %1 leaving ste $2 -pat mlf sde $1==8 - with FD_REG STACK - gen fmul_d {post_inc4,sp},%1 yields %1 leaving sde $2 -pat dvf ste $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 yields %2 leaving ste $2 -pat dvf sde $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 yields %2 leaving sde $2 -pat ngf ste $1==4 - with FS_REG STACK - gen fneg %1 yields %1 leaving ste $2 -pat ngf sde $1==8 - with FD_REG STACK - gen fneg %1 yields %1 leaving sde $2 - -pat adf $1==4 - with FS_REG STACK - gen fadd_s {indirect4,sp},%1 - fmove_s %1,{indirect4,sp} -pat adf $1==8 - with FD_REG STACK - gen fadd_d {indirect4,sp},%1 - fmove_d %1,{indirect4,sp} -pat sbf $1==4 - with FS_REG FS_REG STACK - gen fsub %1,%2 - fmove_s %2,{pre_dec4,sp} -pat sbf $1==8 - with FD_REG FD_REG STACK - gen fsub %1,%2 - fmove_d %2,{pre_dec4,sp} -pat mlf $1==4 - with FS_REG STACK - gen fmul_s {indirect4,sp},%1 - fmove_s %1,{indirect4,sp} -pat mlf $1==8 - with FD_REG STACK - gen fmul_d {indirect4,sp},%1 - fmove_d %1,{indirect4,sp} -pat dvf $1==4 - with FS_REG FS_REG STACK - gen fdiv %1,%2 - fmove_s %2,{pre_dec4,sp} -pat dvf $1==8 - with FD_REG FD_REG STACK - gen fdiv %1,%2 - fmove_d %2,{pre_dec4,sp} -pat ngf $1==4 - with FS_REG STACK - gen fneg %1 - fmove_s %1,{pre_dec4,sp} -pat ngf $1==8 - with FD_REG STACK - gen fneg %1 - fmove_d %1,{pre_dec4,sp} -pat fif $1==4 - with FS_REG FS_REG STACK - gen fmul %1,%2 - fintrz %2,%1 - fsub %1,%2 - fmove_s %2,{pre_dec4,sp} - fmove_s %1,{pre_dec4,sp} -pat fif $1==8 - with FD_REG FD_REG STACK - gen fmul %1,%2 - fintrz %2,%1 - fsub %1,%2 - fmove_d %2,{pre_dec4,sp} - fmove_d %1,{pre_dec4,sp} -#else -pat adf $1==4 leaving cal ".adf4" asp 4 -pat adf $1==8 leaving cal ".adf8" asp 8 -pat sbf $1==4 leaving cal ".sbf4" asp 4 -pat sbf $1==8 leaving cal ".sbf8" asp 8 -pat mlf $1==4 leaving cal ".mlf4" asp 4 -pat mlf $1==8 leaving cal ".mlf8" asp 8 -pat dvf $1==4 leaving cal ".dvf4" asp 4 -pat dvf $1==8 leaving cal ".dvf8" asp 8 -pat ngf $1==4 leaving cal ".ngf4" -pat ngf $1==8 leaving cal ".ngf8" -pat fif $1==4 leaving lor 1 cal ".fif4" asp 4 -pat fif $1==8 leaving lor 1 cal ".fif8" asp 4 -#endif -#if WORD_SIZE==2 -pat fef $1==4 leaving lor 1 adp 0-2 cal ".fef4" asp 2 -pat fef $1==8 leaving lor 1 adp 0-2 cal ".fef8" asp 2 -#else -pat fef $1==4 leaving lor 1 adp 0-4 cal ".fef4" -pat fef $1==8 leaving lor 1 adp 0-4 cal ".fef8" -#endif - -/************************************************ - * Group 6: pointer arithmetic * - ************************************************/ - -pat adp $1==0 /* skip; array instructions might 'leave' this */ - -pat adp -with A_REG yields {t_regAcon, %1, $1} -with exact local_addr yields {local_addr, %1.bd+$1} -with exact ext_addr yields {ext_addr, %1.bd+$1} -with exact regAcon + t_regAcon - yields {t_regAcon, %1.reg, %1.bd+$1} -with exact regAregXcon + t_regAregXcon - yields {t_regAregXcon,%1.reg, %1.xreg, %1.sc, %1.bd+$1} -#if TBL68020 && FANCY_MODES -with exact indirect4 yields {off_con, %1.reg, 0, $1} -with exact LOCAL yields {off_con, lb, %1.bd, $1} -with exact offsetted4 yields {off_con, %1.reg, %1.bd, $1} -with exact off_con yields {off_con, %1.reg, %1.bd, %1.od+$1} -with exact index_off4 yields {indoff_con, %1.reg, %1.xreg, %1.sc, %1.bd, $1} -with exact indoff_con yields {indoff_con, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact off_regXcon yields {off_regXcon, - %1.reg, %1.xreg, %1.sc, %1.bd, %1.od+$1} -with exact absolute4 yields {abs_con, %1.bd, $1} -with exact abs_con yields {abs_con, %1.bd, %1.od+$1} -with exact abs_regXcon yields {abs_regXcon, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact abs_index4 yields {absind_con, %1.sc, %1.xreg, %1.bd, $1} -with exact absind_con yields {absind_con, %1.sc, %1.xreg, %1.bd, %1.od+$1} -with exact ext_regX yields {ext_regX, %1.sc, %1.xreg, %1.bd+$1} -#endif - -pat ads cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving cmu 4 -#endif - -#if WORD_SIZE!=2 -pat ads bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving bne $2 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving bne $2 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving bne $2 -#endif - -pat ads beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving beq $2 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving beq $2 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving beq $2 -#endif - -pat ads LEP bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving loe $2 bne $3 -#endif - -pat ads LEP beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving loe $2 beq $3 -#endif - -pat ads LEP cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LEP $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LEP $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving LEP $2 cmu 4 -#endif - -pat ads lae bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 bne $3 -#endif - -pat ads lae beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 beq $3 -#endif -#endif /* WORD_SIZE==2 */ - -pat ads lae cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lae $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lae $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lae $2 cmu 4 -#endif - -#if WORD_SIZE!=2 -pat ads lal bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 bne $3 -#endif - -pat ads lal beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 beq $3 -#endif - -pat ads lal cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving lal $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving lal $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lal $2 cmu 4 -#endif - -pat ads LLP bne $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 bne $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 bne $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 bne $3 -#endif - -pat ads LLP beq $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 beq $3 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 beq $3 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 beq $3 -#endif -#endif /* WORD_SIZE==2 */ - -pat ads LLP cmp $1==4 -with DD_REG4 any4 - gen add_l %2, %1 yields %1 leaving LLP $2 cmu 4 -with any4 DD_REG4 - gen add_l %1, %2 yields %2 leaving LLP $2 cmu 4 -#ifdef TBL68020 -with regX AA_REG - gen move {regAregXcon, %2, %1.xreg, %1.sc, 0},%2 - yields %2 leaving lol $2 cmu 4 -#endif - -#if WORD_SIZE==2 -pat ads $1==2 - leaving loc 2 loc 4 cii ads 4 -#endif - -pat ads $1==4 -with D_REG4 A_REG yields {regAregXcon, %2, %1, 1, 0} -with D_REG4 regAcon + t_regAcon - yields {t_regAregXcon, %2.reg, %1, 1, %2.bd} -with D_REG4 local_addr yields {t_regAregXcon, lb, %1, 1, %2.bd} -with any4 AA_REG - gen add_l %1, %2 yields %2 - -#ifdef TBL68020 - -with D_REG4 yields {regX, 1, %1} - leaving ads 4 -with regX A_REG yields {regAregXcon, %2, %1.xreg, %1.sc, 0} -with exact regX regAcon yields {regAregXcon, %2.reg, %1.xreg, %1.sc, %2.bd} -with exact regX local_addr - yields {regAregXcon, lb, %1.xreg, %1.sc, %2.bd} -#ifdef FANCY_MODES -with exact regX indirect4 - yields {off_regXcon, %2.reg, %1.xreg,%1.sc,0,0} -with exact regX offsetted4 - yields {off_regXcon, %2.reg, %1.xreg, %1.sc, %2.bd, 0} -with exact regX DLOCAL yields {off_regXcon, lb, %1.xreg, %1.sc, %2.bd, 0} -with exact regX off_con yields {off_regXcon, %2.reg, %1.xreg,%1.sc,%2.bd,%2.od} -with exact regX ext_addr - yields {ext_regX, %1.sc, %1.xreg, %2.bd} -with exact regX absolute4 - yields {abs_regXcon, %1.sc, %1.xreg, %2.bd, 0} -with exact regX abs_con yields {abs_regXcon, %1.sc, %1.xreg, %2.bd, %2.od} -with exact indirect4 ext_addr - yields {off_con, %1.reg, 0, %2.bd} -with exact offsetted4 ext_addr - yields {off_con, %1.reg, %1.bd, %2.bd} -with exact LOCAL ext_addr - yields {off_con, lb, %1.bd, %2.bd} -with exact index_off4 ext_addr - yields {indoff_con, %1.reg, %1.xreg, %1.sc,%1.bd,%2.bd} -with exact absolute4 ext_addr - yields {abs_con, %1.bd, %2.bd} -with exact abs_index4 ext_addr - yields {absind_con, %1.sc, %1.xreg, %1.bd, %2.bd} -with exact indirect4 ext_regX - yields {off_regXcon, %1.reg, %2.xreg, %2.sc, 0, %2.bd} -with exact offsetted4 ext_regX - yields {off_regXcon, %1.reg, %2.xreg,%2.sc,%1.bd,%2.bd} -with exact LOCAL ext_regX - yields {off_regXcon, lb, %2.xreg, %2.sc, %1.bd, %2.bd} -with exact absolute4 ext_regX - yields {abs_regXcon, %2.sc, %2.xreg, %1.bd, %2.bd} -#endif /* FANCY_MODES */ -#endif /* TBL68020 */ - - /* I WOULD ALSO LIKE THIS: - * pat ads - * with const leaving adp %1.num - * BUT THAT DOESN'T WORK. - */ - -#if WORD_SIZE==2 -pat sbs $1==2 - leaving sbs 4 loc 4 loc 2 cii -#endif - -pat sbs $1==4 leaving sbi 4 - -/* regX type OK ??? */ -#ifdef TBL68020 -pat loc slu $2==4 leaving loc $1 sli 4 - -pat loc sli ads $1==1 && $2==4 && $3==4 -with D_REG4 yields {regX, 2, %1} - leaving ads 4 - -pat loc sli ads $1==2 && $2==4 && $3==4 -with D_REG4 yields {regX, 4, %1} - leaving ads 4 - -pat loc sli ads $1==3 && $2==4 && $3==4 -with D_REG4 yields {regX, 8, %1} - leaving ads 4 -#else - -pat loc sli $1==1 && $2==WORD_SIZE -with DD_REG - gen add_i %1, %1 yields %1 - -#if WORD_SIZE==2 -pat loc sli $1==1 && $2==4 -with DD_REG4 - gen add_l %1, %1 yields %1 -#endif - -#endif /* TBL68020 */ - - -/************************************************ - * Group 7: increment / decrement / zero * - ************************************************/ - -pat inc leaving loc 1 adi WORD_SIZE - -pat inl inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen add_i {const, 1}, {LOCAL, $1} - -pat inl - kills all_indir, LOCAL %bd==$1 - gen add_i {const, 1}, {LOCAL, $1} - -pat lol inl $1==$2 - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen add_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat ine - kills posextern - gen add_i {const, 1}, {absolute_int, $1} - -pat dec leaving loc 1 sbi WORD_SIZE - -pat del inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen sub_i {const, 1}, {LOCAL, $1} - -pat del - kills all_indir, LOCAL %bd==$1 - gen sub_i {const, 1}, {LOCAL, $1} - -pat lol del $1==$2 - kills all_indir, LOCAL %bd==$1 - uses DD_REG = {LOCAL, $1} - gen sub_i {const, 1}, {LOCAL, $1} - killreg %a - yields %a - -pat dee - kills posextern - gen sub_i {const, 1}, {absolute_int, $1} - -pat zrl inreg($1)==reg_any - kills regvar($1, reg_any), use_index %xreg==regvar($1, reg_any) - gen clr_i {LOCAL, $1} - -pat zrl inreg($1)==reg_pointer - kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer) - gen move {const4,0}, {areg, regvar($1, reg_pointer)} - -pat zrl - kills all_indir, LOCAL %bd==$1 - gen clr_i {LOCAL, $1} - -pat zrl lol $1==$2 && inreg($1) < 0 - kills all_indir, LOCAL %bd==$1 - gen clr_i {LOCAL, $1} yields {zero_const, 0} - -pat zre - kills posextern - gen clr_i {absolute_int, $1} - -pat zre loe $1==$2 - kills posextern - gen clr_i {absolute_int, $1} yields {zero_const, 0} - -pat zer $1==4 yields {zero_const4, 0} -#if WORD_SIZE==2 -pat zer $1==6 yields {zero_const, 0} {zero_const, 0} {zero_const, 0} -#else -pat zer $1==8 yields {zero_const, 0} {zero_const, 0} -pat zer $1==12 yields {zero_const, 0} {zero_const, 0} {zero_const, 0} -#endif - -pat zer $1/WORD_SIZE <= 65536 -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - clr_i {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat zer -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE} - gen 1: - clr_i {pre_dec_int, sp} - sub_l {const4,1}, %a - bne {slabel, 1b} - -/************************************************ - * Group 8: convert instructions * - ************************************************/ - - - -pat cii -with STACK - kills ALL - gen jsr {absolute4, ".cii"} - -#if WORD_SIZE==2 -/* No sign-extension, though this is probably not what you may want. - * This will teach compiler writers not to convert between unsigneds and - * integers of a different size. - */ -pat loc loc ciu $1==2 && $2==4 -with zero_const - yields {zero_const4, 0} -with any -uses DD_REG4 = {zero_const4, 0} - gen move %1,%a.1 - yields %a - -pat loc loc ciu $1==4 && $2==2 -with zero_const4 - yields {zero_const, 0} -with any4 -uses reusing %1, DD_REG4 = %1 - yields %a.1 - -pat loc loc cui $1==2 && $2==4 -with any2 -uses DD_REG4={zero_const4,0} - gen move %1,%a.1 yields %a - -pat loc loc cui $1==4 && $2==2 -with DD_REG4 - yields %1.1 - -pat loc loc cuu $1==2 && $2==4 -with any2 -uses reusing %1,DD_REG4 - gen move %1,%a.1 - and_l {const4,65535}, %a yields %a -with any2 -uses DD_REG4={zero_const4,0} - gen move %1,%a.1 yields %a - -pat loc loc cuu $1==4 && $2==2 -with DD_REG4 - yields %1.1 -#endif - -pat cuu -with STACK - kills ALL - gen jsr {absolute4, ".cuu"} - -pat ciu leaving cuu - -pat cui leaving cuu - -#if TBL68881 -pat loc loc cif $1==4 && $2==4 -with data4 STACK - uses FS_REG - gen fmove_l %1,%a - fmove_s %a,{pre_dec4,sp} -pat loc loc cif $1==4 && $2==8 -with data4 STACK - uses FD_REG - gen fmove_l %1,%a - fmove_d %a,{pre_dec4,sp} -pat loc loc cuf $1==4 && $2==4 -with D_REG STACK - uses FS_REG - gen fmove_l %1,%a - tst_l %1 - bge {slabel, 1f} - fsub_l {const,0-2147483648},%a - fsub_l {const,0-2147483648},%a - 1: - fmove_s %a,{pre_dec4,sp} -pat loc loc cuf $1==4 && $2==8 -with D_REG STACK - uses FD_REG - gen fmove_l %1,%a - tst_l %1 - bge {slabel, 1f} - fsub_l {const,0-2147483648},%a - fsub_l {const,0-2147483648},%a - 1: - fmove_d %a,{pre_dec4,sp} -pat loc loc cfi $1==4 && $2==4 -with FS_REG - uses D_REG - gen fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfi $1==8 && $2==4 -with FD_REG - uses D_REG - gen fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfu $1==4 && $2==4 -with FS_REG - uses D_REG - gen fabs %1 - fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cfu $1==8 && $2==4 -with FD_REG - uses D_REG - gen fabs %1 - fintrz %1,%1 - fmove_l %1,%a yields %a -pat loc loc cff $1==4 && $2==8 -with FS_REG STACK - gen fmove_d %1,{pre_dec4,sp} -pat loc loc cff $1==8 && $2==4 -with FD_REG STACK - gen fmove_s %1,{pre_dec4,sp} -#else -/* - * Floating point stuff - * Conversion - */ -#if WORD_SIZE==2 -/* The patterns need some room on the stack first */ -pat loc loc cif $1==2 && $2==4 leaving loc $1 cal ".cif4" - -pat loc loc cif $1==2 && $2==8 -with any2 -kills ALL -gen clr_l {pre_dec4, sp} - move_w %1,{pre_dec2, sp} leaving loc $1 cal ".cif8" - -pat loc loc cif $1==4 && $2==4 leaving loc $1 cal ".cif4" asp 2 - -pat loc loc cif $1==4 && $2==8 -with any4 -kills ALL -gen clr_w {pre_dec2, sp} - move_l %1,{pre_dec4, sp} leaving loc $1 cal ".cif8" - -pat loc loc cuf $1==2 && $2==4 leaving loc $1 cal ".cuf4" - -pat loc loc cuf $1==2 && $2==8 -with any2 -kills ALL -gen clr_l {pre_dec4, sp} - move_w %1,{pre_dec2, sp} leaving loc $1 cal ".cuf8" - -pat loc loc cuf $1==4 && $2==4 leaving loc $1 cal ".cuf4" asp 2 - -pat loc loc cuf $1==4 && $2==8 -with any4 -kills ALL -gen clr_w {pre_dec2, sp} - move_l %1,{pre_dec4, sp} leaving loc $1 cal ".cuf8" - -pat loc loc cfi $1==4 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfi" asp 8-$2 - -pat loc loc cfi $1==8 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfi" asp 12-$2 - -pat loc loc cfu $1==4 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfu" asp 8-$2 -pat loc loc cfu $1==8 && ($2==2 || $2==4) - leaving loc $1 loc $2 cal ".cfu" asp 12-$2 -#else -pat loc loc cif $1==4 && $2==4 leaving loc 4 cal ".cif4" asp 4 -pat loc loc cif $1==4 && $2==8 leaving loc 4 cal ".cif8" -pat loc loc cuf $1==4 && $2==4 leaving loc 4 cal ".cuf4" asp 4 -pat loc loc cuf $1==4 && $2==8 leaving loc 4 cal ".cuf8" -pat loc loc cfi leaving loc $1 loc $2 cal ".cfi" asp $1+4 -pat loc loc cfu leaving loc $1 loc $2 cal ".cfu" asp $1+4 -#endif -pat loc loc cff $1==8 && $2==4 leaving cal ".cff4" asp 4 -pat loc loc cff $1==4 && $2==8 - leaving zer 4 exg 4 cal ".cff8" -#endif /* TBL68881 */ - -/************************************************ - * Group 9: logical instructions * - ************************************************/ - - -#if WORD_SIZE==2 -proc log2w -with datalt4+consts4-sconsts4 DD_REG4 - gen xxx* %1, %2 yields %2 -with DD_REG4 datalt4+consts4-sconsts4 - gen xxx* %2, %1 yields %1 -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen xxx* {post_inc4, sp}, %a yields %a -#endif - -proc logw -with datalt_int+consts-sconsts DD_REG - gen xxx* %1, %2 yields %2 -with DD_REG datalt_int+consts-sconsts - gen xxx* %2, %1 yields %1 -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen xxx* {post_inc_int, sp}, %a yields %a - -proc logdef example and -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1}, - AA_REG, - DD_REG - gen - lea {regAcon, sp, $1}, %b - 1: - move_i {post_inc_int, sp}, %c - xxx* %c, {post_inc_int, %b} - dbf %a, {slabel, 1b} - -#if WORD_SIZE==4 -proc logndef -with DD_REG4 STACK - uses AA_REG, - DD_REG - gen - lea {regAregXcon, sp, %1, 1, 0},%a - asr_l {small_const, 2}, %1 - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - sub_l {const4,1}, %1 - bne {slabel, 1b} -#else -proc logndef -with any_int STACK - uses AA_REG, - DD_REG, - DD_REG4={const,0} - gen - move %1, %c.1 - lea {regAregXcon, sp, %c, 1, 0},%a - asr_l {small_const, 1}, %c - sub_l {const4,1}, %c - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - dbf %c, {slabel, 1b} -#endif - -proc logbdef example and -with STACK - uses AA_REG, - DD_REG, - DD_REG4 - gen - move_l {const4,$1/WORD_SIZE}, %c - lea {regAregXcon, sp, %c, 1, 0},%a - 1: - move_i {post_inc_int, sp}, %b - xxx* %b, {post_inc_int, %a} - sub_l {const4,1}, %c - bne {slabel, 1b} - -pat and $1==WORD_SIZE call logw(AND_I) -#if WORD_SIZE==2 -pat and $1==2*WORD_SIZE call log2w("and.l") -#endif -pat and $1>4 && $1/WORD_SIZE<=65536 call logdef(AND_I) -pat and defined($1) call logbdef(AND_I) -pat and !defined($1) call logndef(AND_I) - -pat ior $1==WORD_SIZE call logw(OR_I) -#if WORD_SIZE==2 -pat ior $1==2*WORD_SIZE call log2w("or.l") -#endif -pat ior $1>2 && $1/WORD_SIZE<=65536 call logdef(OR_I) -pat ior defined($1) call logbdef(OR_I) -pat ior !defined($1) call logndef(OR_I) - -#if WORD_SIZE==2 -pat xor $1==2 -with DD_REG conreg2-bconst - gen eor_w %2, %1 yields %1 -#endif - -pat xor $1==4 -with DD_REG4 conreg4-bconst4 - gen eor_l %2, %1 yields %1 - -pat xor $1>4 && $1/WORD_SIZE<=65536 call logdef(EOR_I) -pat xor defined($1) call logbdef(EOR_I) -pat xor !defined($1) call logndef(EOR_I) - -#if WORD_SIZE==2 -pat com $1==2 -with DD_REG - gen not_w %1 yields %1 -#endif - -pat com $1==4 -with DD_REG4 - gen not_l %1 yields %1 - -pat com $1==8 -with DD_REG4 DD_REG4 - gen not_l %1 - not_l %2 yields %2 %1 - -pat com $1>8 && $1/WORD_SIZE<=65536 -with STACK - uses AA_REG, - DD_REG4 = {const, $1/WORD_SIZE -1} - gen move_l sp, %a - 1: - not_i {post_inc_int, %a} - dbf %b, {slabel, 1b} - -pat com defined($1) -with STACK - uses AA_REG, - DD_REG4 = {const, $1/WORD_SIZE} - gen move_l sp, %a - 1: - not_i {post_inc_int, %a} - sub_l {const4, 1}, %b - bne {slabel, 1b} - -#if WORD_SIZE==4 -pat com !defined($1) -with DD_REG STACK - uses AA_REG - gen move_l sp, %a - asr_l {small_const, 2}, %1 - 1: - not_i {post_inc_int, %a} - sub_l {const4, 1}, %1 - bne {slabel, 1b} -#else -pat com !defined($1) -with any_int STACK - uses AA_REG, - DD_REG4={const,0} - gen move %1, %b.1 - move_l sp, %a - asr_l {small_const, 1}, %b - sub_l {const4, 1}, %b - 1: - not_i {post_inc_int, %a} - dbf %b, {slabel, 1b} -#endif - -#if WORD_SIZE==2 -pat rol $1==2 -with shconreg DD_REG - gen rol_w %1, %2 yields %2 -#endif - -pat rol $1==4 -with shconreg DD_REG4 - gen rol_l %1, %2 yields %2 - -#if WORD_SIZE==2 -pat ror $1==2 -with shconreg DD_REG - gen ror_w %1, %2 yields %2 -#endif - -pat ror $1==4 -with shconreg DD_REG4 - gen ror_l %1, %2 yields %2 - - - - -/************************************************ - * Group 10: sets * - ************************************************/ - -#if WORD_SIZE==2 -pat inn $1==4 -with conreg2 DD_REG4 - gen btst %1, %2.1 - sne {dreg1, %2.1} - and_l {const4, 1}, %2 - yields %2.1 -#endif - -pat inn $1==WORD_SIZE -with conreg2 DD_REG - gen btst %1, %2 - sne {dreg1, %2} - and_i {const, 1}, %2 - yields %2 - -/* The interface for the .inn differ for m68k2 and m68k4. */ -/* ??? Work out a cleaner interface, that is similar for all tables */ -#if WORD_SIZE==2 -pat inn defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 - -pat inn !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 -#else -pat inn defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - move {const, $1}, d1 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 - -pat inn !defined($1) -with any_int any_int STACK - kills ALL - gen move %2, d0 - move %1, d1 - jsr {absolute4, ".inn"} - killreg d0 - yields d0 -#endif /* WORD_SIZE==2 */ - -pat loc inn $2==WORD_SIZE && small($1) -with DD_REG - gen asr_i {small_const, $1}, %1 - and_i {const, 1}, %1 - yields %1 - -#if WORD_SIZE==2 -pat set $1==2 -with conreg2 - uses DD_REG = {zero_const, 0} - gen bset %1, %a yields %a -#else - -pat set $1==4 -with conreg2 - uses DD_REG4 = {zero_const4, 0} - gen bset %1, %a yields %a -#endif - -#if WORD_SIZE==2 -pat set $1>2 -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".set"} - -pat set !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".set"} -#else -pat set $1>4 -with any_int STACK - kills ALL - gen move %1, d0 - move {const, $1}, d1 - jsr {absolute4, ".set"} - -pat set !defined($1) -with any_int any_int STACK - kills ALL - gen move %2, d0 - move %1, d1 - jsr {absolute4, ".set"} -#endif /* WORD_SIZE==2 */ - - - - -/************************************************ - * Group 11: arrays * - ************************************************/ - -/* ??? interface */ -#if WORD_SIZE==2 -pat lar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".lar"} - -pat sar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".sar"} - -pat aar defined($1) && $1 == WORD_SIZE -with STACK - kills ALL - gen jsr {absolute4, ".aar"} -#else -pat lar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".lar"} - -pat lar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".lar"} - -pat sar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".sar"} - -pat sar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".sar"} - -pat aar defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".aar"} - yields a0 - -pat aar !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".aar"} - yields a0 - -#if ARR_OPT -pat lae lar $2==4 && nicesize(rom($1,3)) - leaving lae $1 aar 4 loi rom($1, 3) -pat lae sar $2==4 && nicesize(rom($1,3)) - leaving lae $1 aar 4 sti rom($1, 3) - -pat lae aar $2==4 && rom($1,3)==1 - leaving ads 4 adp 0-rom($1,1) - -#ifdef TBL68020 -pat lae aar $2==4 && nicesize(rom($1,3)) -with D_REG yields {regX, rom($1,3), %1} - leaving ads 4 adp rom($1,3)*(0-rom($1,1)) -#else /* TBL68020 */ -pat lae aar $2==4 && rom($1,3)==2 -with DD_REG - gen asl_l {small_const, 1}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<1 - -pat lae aar $2==4 && rom($1,3)==4 -with DD_REG - gen asl_l {small_const, 2}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<2 - -pat lae aar $2==4 && rom($1,3)==8 -with DD_REG - gen asl_l {small_const, 3}, %1 - yields %1 - leaving ads 4 adp (0 - rom($1,1))<<3 -#endif /* TBL68020 */ -#endif /* ARR_OPT */ -#endif /* WORD_SIZE!=2 */ - - /* I WOULD ALSO LIKE THESE: - * pat lae aar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * pat lae lar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * loi rom($1,3) - * pat lae sar $2==4 && defined(rom($1,3)) - * with const leaving adp rom($1,3)*(%1.num-rom($1,1)) - * sti rom($1,3) - * BUT THEY DON'T WORK. - */ - - - -/************************************************ - * Group 12: compare instructions * - ************************************************/ - - -#if WORD_SIZE==2 -pat cmi defined($1) && $1==2 -with any2 DD_REG - uses DD_REG = {zero_const, 0} - gen cmp_w %1,%2 - beq {slabel,2f} - bgt {slabel,1f} - add_w {small_const, 1},%a - bra {slabel,2f} - 1: - sub_w {small_const, 1},%a - 2: - yields %a - -pat cmi defined($1) && $1==4 -with STACK - gen jsr {absolute4, ".cmi"} yields d1 -#else -/* pat cmi $1==4 leaving sbi 4 - WRONG !! -*/ - -pat cmi defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cmi"} - yields d0 - -pat cmi !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cmi"} - yields d0 -#endif - -/* pat cmu $1==4 leaving sbi 4 - WRONG !! -*/ - -#if WORD_SIZE==2 -pat cmu defined($1) -with STACK - gen move {const, $1},d0 - jsr {absolute4, ".cmu"} - -pat cmu !defined($1) -with any STACK - gen move %1,d0 - jsr {absolute4, ".cmu"} -#else -pat cmu defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cmu"} - yields d0 - -pat cmu !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cmu"} - yields d0 -#endif /* WORD_SIZE==2 */ - -#if WORD_SIZE==2 -pat cms $1==2 leaving cmi 2 -pat cms $1==4 leaving cmi 4 -#else -pat cms $1==4 leaving cmi 4 -#endif - -pat cms defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".cms"} - yields d0 - -pat cms !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".cms"} - yields d0 - -pat cmp leaving cmu 4 - -#ifndef XXXXX -proc txx -with test_set_int - uses reusing %1,DD_REG - gen test %1 - bxx[1] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - bxx[2] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a - -/* for some branches, we need to get rid of the overflow bit first. - The easiest way to do this is to just test .... -*/ -proc txx_ouch -with test_set_int - uses reusing %1,DD_REG - gen killcc. - test %1 - bxx[1] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - bxx[2] {slabel,1f} - clr_i %a - bra {slabel,2f} - 1: - move_i {small_const,1},%a - 2: - yields %a - -pat tlt call txx("bmi", "bcs") -pat tle call txx_ouch("ble", "bls") -pat teq call txx("beq", "beq") -pat tne call txx("bne", "bne") -pat tge call txx("bpl", "bcc") -pat tgt call txx_ouch("bgt", "bhi") -#else -proc txx -with test_set_int - uses reusing %1,DD_REG - gen test %1 - sxx[1] %a - neg_b %a - yields {extend1, %a} - -#if WORD_SIZE==2 -with test_set1 -#else -with test_set1 + test_set2 -#endif - uses reusing %1,DD_REG - gen test %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} - -pat tlt call txx("smi", "scs") -pat tle call txx("sle", "sls") -pat teq call txx("seq", "seq") -pat tne call txx("sne", "sne") -pat tge call txx("spl", "scc") -pat tgt call txx("sgt", "shi") -#endif - -/* - * Floating point - * Comparision - */ -#if TBL68881 -pat cmf $1==4 -with FS_REG FS_REG - uses D_REG={const,0} - gen fcmp %1,%2 - fbeq {slabel,2f} - fblt {slabel,1f} - add_l {const,1},%a - bra {slabel,2f} - 1: - sub_l {const,1},%a - 2: yields %a -pat cmf $1==8 -with FD_REG FD_REG - uses D_REG={const,0} - gen fcmp %1,%2 - fbeq {slabel,2f} - fblt {slabel,1f} - add_l {const,1},%a - bra {slabel,2f} - 1: - sub_l {const,1},%a - 2: yields %a -#else -pat cmf $1==4 leaving cal ".cmf4" asp 8 lfr WORD_SIZE -pat cmf $1==8 leaving cal ".cmf8" asp 16 lfr WORD_SIZE -#endif -/* - * Floating Point - * Zero Constants - */ -pat zrf leaving zer $1 - -/************************************************ - * Group 13: branch instructions * - ************************************************/ - -#if WORD_SIZE==2 -pat lab topeltsize($1)==4 && !fallthrough($1) -kills ALL -gen labeldef $1 yields dl0 - -pat lab topeltsize($1)==4 && fallthrough($1) -with any4 STACK -kills ALL -gen move %1, dl0 - killreg dl0 - labeldef $1 yields dl0 -#endif - -pat lab topeltsize($1)==WORD_SIZE && !fallthrough($1) -kills ALL -gen labeldef $1 yields d0 - -pat lab topeltsize($1)==WORD_SIZE && fallthrough($1) -with any_int STACK -kills ALL -gen move %1,d0 - killreg d0 - labeldef $1 yields d0 - -pat lab -with STACK -kills ALL -gen labeldef $1 - -#if WORD_SIZE==2 -pat bra topeltsize($1)==4 -with any4 STACK -gen move %1,dl0 - bra {llabel, $1} -#endif - -pat bra topeltsize($1)==WORD_SIZE -with any_int STACK -gen move %1,d0 - bra {llabel, $1} - -pat bra -with STACK - gen bra {llabel, $1} - -proc brxx example beq -with exact extend1 extend1 - kills ALL - gen cmp_b %1,%2 - bxx[1] {llabel, $1} -#if WORD_SIZE!=2 -with exact extend2 extend2 - kills ALL - gen cmp_w %1,%2 - bxx[1] {llabel, $1} -#endif -with exact sconsts any_int - kills ALL - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {llabel, $1} -with exact any_int sconsts - kills ALL - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {llabel, $1} -with any_int-sconsts genreg STACK - gen cmp_i %1, %2 - bxx[1] {llabel, $1} -with genreg any_int-sconsts STACK - gen cmp_i %2, %1 - bxx[2] {llabel, $1} -with exact immediate_int-sconsts imm_cmp_int - kills ALL - gen cmp_i %1, %2 - bxx[1] {llabel, $1} -with exact imm_cmp_int immediate_int-sconsts - kills ALL - gen cmp_i %2, %1 - bxx[2] {llabel, $1} -with exact immediate_int-sconsts STACK - gen cmp_i %1, {post_inc_int, sp} - bxx[1] {llabel, $1} -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - bxx[2] {llabel, $1} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - bxx[2] {llabel, $1} -#if WORD_SIZE==4 -with exact post_inc4 post_inc4 - gen cmp_l %1,%2 - bxx[1] {llabel, $1} -#endif -with exact post_inc2 post_inc2 - gen cmp_w %1,%2 - bxx[1] {llabel, $1} -with exact post_inc1 post_inc1 - gen cmp_b %1,%2 - bxx[1] {llabel, $1} - -pat blt call brxx("blt","bgt") -pat ble call brxx("ble","bge") -pat beq call brxx("beq","beq") -pat bne call brxx("bne","bne") -pat bge call brxx("bge","ble") -pat bgt call brxx("bgt","blt") - -proc zxx example zeq -with test_set_int STACK - gen test %1 - bxx[1] {llabel, $1} -#if WORD_SIZE==2 -with test_set1 STACK -#else -with test_set1 + test_set2 STACK -#endif - gen test %1 - bxx[2] {llabel, $1} -with exact STACK - gen tst_i {post_inc_int, sp} - bxx[1] {llabel, $1} - -/* for some branches, we need to get rid of the overflow bit first. - The easiest way to do this is to just test .... -*/ -proc zxx_ouch example zeq -with test_set_int STACK - gen killcc. - test %1 - bxx[1] {llabel, $1} -#if WORD_SIZE==2 -with test_set1 STACK -#else -with test_set1 + test_set2 STACK -#endif - gen test %1 - bxx[2] {llabel, $1} -with exact STACK - gen tst_i {post_inc_int, sp} - bxx[1] {llabel, $1} - -pat zlt call zxx("bmi", "bcs") -pat zle call zxx_ouch("ble", "bls") -pat zeq call zxx("beq", "beq") -pat zne call zxx("bne", "bne") -pat zge call zxx("bpl", "bcc") -pat zgt call zxx_ouch("bgt", "bhi") - -/************************************************ - * Group 14: procedure calls instructions * - ************************************************/ - - -pat cai -with exact ext_addr - kills ALL - gen jsr {absolute4, %1.bd} -with A_REG STACK - kills ALL - gen jsr {indirect4, %1} -with STACK - kills ALL - uses AA_REG = {post_inc4, sp} - gen jsr {indirect4, %a} -with address STACK - kills ALL - gen jsr %1 - -pat cal -with STACK - kills ALL - gen jsr {absolute4, $1} - -#if WORD_SIZE==2 -pat lfr $1==2 yields d0 -pat lfr $1==4 yields dl0 -pat lfr $1==8 yields dl1 dl0 -#else -pat lfr $1==4 yields d0 -pat lfr $1==8 yields d1 d0 -#endif - -pat ret $1==0 - gen return - -pat asp ret $2==0 - gen return - -#if WORD_SIZE==2 -pat ret $1==2 -with any2 - gen move %1, d0 - return -with exact STACK - gen move_w {post_inc2, sp}, d0 - return -#endif - -pat ret $1==4 -with any4 - gen move %1, dl0 - return -with exact STACK - gen move_l {post_inc4, sp}, dl0 - return - -pat ret $1==8 -with any4 any4 - gen move %1, dl0 - move %2, dl1 - return -with exact any4 STACK - gen move %1, dl0 - move_l {post_inc4, sp}, dl1 - return -with exact STACK - gen move_l {post_inc4, sp}, dl0 - move_l {post_inc4, sp}, dl1 - return - - -/************************************************ - * Group 15: miscellaneous instructions * - ************************************************/ - -#if WORD_SIZE==2 -pat asp $1==2 -with any2-pre_post -with STACK - gen add_l {const4, $1}, sp -#endif - -pat asp $1==4 -#if WORD_SIZE==2 -with any-pre_post any-pre_post -#endif -with any4-pre_post -with STACK - gen add_l {const4, $1}, sp - -#if WORD_SIZE==2 -pat asp $1==6 -with any4-pre_post any-pre_post -with any-pre_post any4-pre_post -with any-pre_post any-pre_post any-pre_post -with STACK - gen add_l {const4, $1}, sp -#endif - -pat asp $1==8 -with any4-pre_post any4-pre_post -with STACK - gen add_l {const4, $1}, sp - -pat asp -with STACK - gen lea {regAcon, sp, $1}, sp - -/* ??? DD_REG$ ??? */ -#if WORD_SIZE==2 -pat ass $1==2 -with any2 STACK -uses reusing %1,DD_REG4 - gen move %1,%a.1 - ext_l %a.1 - add_l %a, sp -#endif - -pat ass $1==4 -with any4 STACK - gen add_l %1, sp - -#if WORD_SIZE==2 -pat blm $1==2 -with A_REG A_REG - kills allexceptcon - gen move_w {indirect2, %2}, {indirect2, %1} -#endif - -pat blm $1==4 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - -#if WORD_SIZE==2 -pat blm $1==6 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - move_w {offsetted2, %2, 4}, {offsetted2, %1, 4} -#endif - -pat blm $1==8 -with A_REG A_REG - kills allexceptcon - gen move_l {indirect4, %2}, {indirect4, %1} - move_l {offsetted4, %2, 4}, {offsetted4, %1, 4} - -pat blm $1>2*WORD_SIZE && $1/WORD_SIZE <= 65536 -with AA_REG AA_REG - kills ALL - uses DD_REG4={const, $1/WORD_SIZE -1} - gen 1: - move_i {post_inc_int, %2}, {post_inc_int, %1} - dbf %a, {slabel, 1b} - -pat blm -with AA_REG AA_REG - kills ALL - uses DD_REG4={const,$1/WORD_SIZE} - gen 1: - move_i {post_inc_int, %2}, {post_inc_int, %1} - sub_l {const4, 1}, %a - bne {slabel, 1b} - -#if WORD_SIZE==2 -pat bls $1==2 -with DD_REG AA_REG AA_REG - kills ALL - gen asr_w {small_const, 1}, %1 - beq {slabel, 2f} - 1: - move_w {post_inc2, %3}, {post_inc2, %2} - sub_w {const, 1}, %1 - bne {slabel, 1b} - 2: -#endif - -pat bls $1==4 -with DD_REG4 AA_REG AA_REG - kills ALL - gen -#if WORD_SIZE==2 - asr_l {small_const, 1}, %1 -#else - asr_l {small_const, 2}, %1 -#endif - beq {slabel, 2f} - 1: - move_i {post_inc_int, %3}, {post_inc_int, %2} - sub_l {const4, 1}, %1 - bne {slabel, 1b} - 2: - -#if WORD_SIZE==2 -pat csa $1==2 -#if TBL68020 -with any4 D_REG+LOCAL+const+ILOCAL+absolute2 STACK -#else -with any4 D_REG+LOCAL+const+absolute2 STACK -#endif - gen move %1,a0 - move %2,d0 - jmp {absolute4, ".csa2"} -#endif - -pat csa $1==4 -#if TBL68020 && WORD_SIZE==4 -with any4 D_REG4+DLOCAL+const4+ILOCAL+absolute4 STACK -#else -with any4 D_REG4+DLOCAL+const4+absolute4 STACK -#endif - gen move %1,a0 - move %2,dl0 - jmp {absolute4, ".csa4"} - -#if WORD_SIZE==2 -pat csb $1==2 -#if TBL68020 -with any4 D_REG+LOCAL+const+ILOCAL+absolute2 STACK -#else -with any4 D_REG+LOCAL+const+absolute2 STACK -#endif - gen move %1,a0 - move %2,d0 - jmp {absolute4, ".csb2"} -#endif - -pat csb $1==4 -#if TBL68020 && WORD_SIZE==4 -with any4 D_REG4+DLOCAL+const4+ILOCAL+absolute4 STACK -#else -with any4 D_REG4+DLOCAL+const4+absolute4 STACK -#endif - gen move %1,a0 - move %2,dl0 - jmp {absolute4, ".csb4"} - -pat dch leaving loi 4 - -#if WORD_SIZE==2 -pat dup $1==2 -with dups2 yields %1 %1 -#endif - -pat dup $1==4 -#if WORD_SIZE==2 -with dups2 dups2 yields %2 %1 %2 %1 -#endif -with dups4 yields %1 %1 - -pat dup $1==8 -with dups4 dups4 yields %2 %1 %2 %1 - -pat dup $1>2*WORD_SIZE && $1/WORD_SIZE<=65536 -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE -1} - gen 1: - move_i {offsetted_int, sp, $1 -WORD_SIZE}, {pre_dec_int, sp} - dbf %a, {slabel, 1b} - -pat dup -with STACK - uses DD_REG4 = {const, $1/WORD_SIZE} - gen 1: - move_i {offsetted_int, sp, $1 -WORD_SIZE}, {pre_dec_int, sp} - sub_l {const4, 1}, %a - bne {slabel, 1b} - -#if WORD_SIZE==2 -pat dus $1==2 -with any2 STACK - uses DD_REG4 = {zero_const4, 0}, AA_REG - gen - move_w %1, %a.1 - lea {regAregXcon, sp, %a, 1, 0}, %b - asr_l {small_const, 1}, %a - beq {slabel, 2f} - 1: - move_w {pre_dec2, %b}, {pre_dec2, sp} - sub_l {const4, 1}, %a - bne {slabel, 1b} - 2: -#endif - -pat dus $1==4 -with DD_REG4 STACK - uses AA_REG - gen - lea {regAregXcon, sp, %1, 1, 0}, %a -#if WORD_SIZE==2 - asr_l {small_const, 1}, %1 -#else - asr_l {small_const, 2}, %1 -#endif - beq {slabel, 2f} - 1: - move_i {pre_dec_int, %a}, {pre_dec_int, sp} - sub_l {const4, 1}, %1 - bne {slabel, 1b} - 2: - -#if WORD_SIZE==2 -pat exg $1==2 -with any2 any2 yields %1 %2 -#endif - -pat exg $1==4 -with any4 any4 yields %1 %2 - -pat exg defined($1) -with STACK - kills ALL - gen move {const, $1}, d0 - jsr {absolute4, ".exg"} - -pat exg !defined($1) -with any_int STACK - kills ALL - gen move %1, d0 - jsr {absolute4, ".exg"} - -pat fil - gen move_l {ext_addr, $1}, {absolute4, ".filn"} - -pat gto -with STACK - uses AA_REG = {ext_addr, $1} - gen move_l {offsetted4, %a, 8}, lb - move_l {offsetted4, %a, 4}, sp -#if TBL68020 && FANCY_MODES - jmp {OFF_off4, %a, 0, 0} -#else - move_l {indirect4, %a}, %a - jmp {indirect4, %a} -#endif - -pat lim yields {absolute_int, ".trpim"} - -pat lin - kills posextern - gen move_i {const, $1}, {absolute_int, ".lino"} - -pat lni - kills posextern - gen add_i {const, 1}, {absolute_int, ".lino"} - -pat lor $1==0 yields lb - -pat lor $1==1 -with STACK - uses AA_REG = sp yields %a - -pat lor $1==2 yields {absolute4, ".reghp"} - -pat lpb leaving adp 8 - -pat mon -with STACK - kills ALL - gen jsr {absolute4, ".mon"} - -pat nop -with STACK - kills ALL -#ifdef DEBUG - gen jsr {absolute4, ".nop"} -#endif - -#if WORD_SIZE==2 -pat rck $1==2 -#ifdef TBL68020 -with ext_addr D_REG - gen cmp2_w {absolute2, %1.bd}, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with address-ext_addr D_REG - gen cmp2_w %1, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with A_REG D_REG - gen cmp2_w {indirect2, %1}, %2 - bcc {slabel, 1f} - move_w {small_const, 1}, {pre_dec2, sp} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -#else -with STACK - kills ALL - gen jsr {absolute4, ".rck"} -#endif -#endif /* WORD_SIZE==2 */ - -#if WORD_SIZE==4 || TBL68020 -pat rck $1==4 -#ifdef TBL68020 -with ext_addr D_REG4 - gen cmp2_l {absolute4, %1.bd}, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with address-ext_addr D_REG4 - gen cmp2_l %1, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -with A_REG D_REG4 - gen cmp2_l {indirect4, %1}, %2 - bcc {slabel, 1f} - pea {absolute4, 1} /* push constant 1 == ERANGE */ - jsr {absolute4, ".trp"} - 1: yields %2 -#else /* TBL68020 */ -with STACK - kills ALL - gen jsr {absolute4, ".rck"} -#endif /* TBL68020 */ -#endif /* WORD_SIZE==4 || TBL68020 */ - -pat rtt leaving ret 0 - -pat sig -with any4 - kills posextern - uses AA_REG - gen move_l {absolute4, ".trppc"}, %a - move_l %1, {absolute4, ".trppc"} - yields %a - -pat sim -with any_int - kills posextern - gen move_i %1, {absolute_int, ".trpim"} - -pat str $1==0 -with any4 STACK - kills ALL - gen move_l %1, lb - -pat str $1==1 -with any4 STACK - gen move_l %1, sp - -pat str $1==2 -with STACK - kills ALL - gen jsr {absolute4, ".strhp"} - -pat trp -with STACK - kills ALL - gen jsr {absolute4, ".trp"} - - - -/************************************************ - * more rules for long EM-patterns * - ************************************************/ - -pat loe ine $1==$2 - kills posextern - uses DD_REG = {absolute_int, $1} - gen add_i {const,1}, {absolute_int, $1} - killreg %a - yields %a - -pat loe dee $1==$2 - kills posextern - uses DD_REG = {absolute_int, $1} - gen sub_i {const,1}, {absolute_int, $1} - killreg %a - yields %a - - -proc llol1shstl example lol loc sli stl /* only left */ - kills all_indir, DLOCAL %bd==$1 - gen shw* {offsetted2, lb, $1+2} - roxl {offsetted2, lb, $1} - -proc lloe1shste example loe loc sli ste /* only left */ - kills posextern - gen shw* {absolute2, $1+2} - roxl {absolute2, $1} - -proc llil1shsil example lil loc sli sil /* only left */ - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen shw* {OFF_off2, lb, $1, 2} - roxl {OFF_off2, lb, $1, 0} -#else - uses AA_REG = {DLOCAL, $1} - gen shw* {offsetted2, %a, 2} - roxl {indirect2, %a} -#endif - -proc rlol1shstl example lol loc sri stl /* only right */ - kills all_indir, DLOCAL %bd==$1 - gen shw* {offsetted2, lb, $1} - roxr {offsetted2, lb, $1+2} - -proc rloe1shste example loe loc sri ste /* only right */ - kills posextern - gen shw* {absolute2, $1} - roxr {absolute2, $1+2} - -proc rlil1shsil example lil loc sri sil /* only right */ - kills allexceptcon -#if TBL68020 && FANCY_MODES - gen shw* {OFF_off2, lb, $1, 0} - roxr {OFF_off2, lb, $1, 2} -#else - uses AA_REG = {DLOCAL, $1} - gen shw* {indirect2, %a} - roxr {offsetted2, %a, 2} -#endif - -pat lol loc sli stl $1==$4 && $2==1 && $3==4 call llol1shstl("asl #1,") -pat loe loc sli ste $1==$4 && $2==1 && $3==4 call lloe1shste("asl #1,") -pat lil loc sli sil $1==$4 && $2==1 && $3==4 call llil1shsil("asl #1,") -pat lol loc sri stl $1==$4 && $2==1 && $3==4 call rlol1shstl("asr #1,") -pat loe loc sri ste $1==$4 && $2==1 && $3==4 call rloe1shste("asr #1,") -pat lil loc sri sil $1==$4 && $2==1 && $3==4 call rlil1shsil("asr #1,") -pat lol loc slu stl $1==$4 && $2==1 && $3==4 call llol1shstl("asl #1,") -pat loe loc slu ste $1==$4 && $2==1 && $3==4 call lloe1shste("asl #1,") -pat lil loc slu sil $1==$4 && $2==1 && $3==4 call llil1shsil("asl #1,") -pat lol loc sru stl $1==$4 && $2==1 && $3==4 call rlol1shstl("lsr #1,") -pat loe loc sru ste $1==$4 && $2==1 && $3==4 call rloe1shste("lsr #1,") -pat lil loc sru sil $1==$4 && $2==1 && $3==4 call rlil1shsil("lsr #1,") - - -proc txxand -with test_set_int DD_REG - gen test %1 - bxx[1] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 - -proc txxior -with test_set_int DD_REG - gen test %1 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 - -proc txxand_ouch -with test_set_int DD_REG - gen killcc. - test %1 - bxx[1] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %2 - 1: yields %2 - -proc txxior_ouch -with test_set_int DD_REG - gen killcc. - test %1 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 -#if WORD_SIZE==2 -with test_set1 DD_REG -#else -with test_set1 + test_set2 DD_REG -#endif - gen test %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %2 - 1: yields %2 - -pat tlt and $2==WORD_SIZE call txxand("bmi", "bcs") -pat tle and $2==WORD_SIZE call txxand_ouch("ble", "bls") -pat teq and $2==WORD_SIZE call txxand("beq", "beq") -pat tne and $2==WORD_SIZE call txxand("bne", "bne") -pat tge and $2==WORD_SIZE call txxand("bpl", "bcc") -pat tgt and $2==WORD_SIZE call txxand_ouch("bgt", "bhi") - -pat tlt ior $2==WORD_SIZE call txxior("bpl", "bcc") -pat tle ior $2==WORD_SIZE call txxior_ouch("bgt", "bhi") -pat teq ior $2==WORD_SIZE call txxior("bne", "bne") -pat tne ior $2==WORD_SIZE call txxior("beq", "beq") -pat tge ior $2==WORD_SIZE call txxior("bmi", "bcs") -pat tgt ior $2==WORD_SIZE call txxior_ouch("ble", "bls") - -proc cmxtxxand -with exact extend1 extend1 DD_REG - gen cmp_b %2, %1 - bxx[2] {llabel,1f} - bclr {const,0}, %3 - 1: yields %3 -with exact extend2 extend2 DD_REG - gen cmp_w %2, %1 - bxx[2] {llabel,1f} - bclr {const,0}, %3 - 1: yields %3 -with exact sconsts any_int DD_REG - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact any_int sconsts DD_REG - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with any_int-sconsts genreg DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with genreg any_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact immediate_int-sconsts imm_cmp_int DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 -with exact imm_cmp_int immediate_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bclr {const,0}, %3 - 1: yields %3 - -proc cmxtxxior -with exact extend1 extend1 DD_REG - gen cmp_b %2, %1 - bxx[2] {llabel,1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact extend2 extend2 DD_REG - gen cmp_w %2, %1 - bxx[2] {llabel,1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact sconsts any_int DD_REG - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact any_int sconsts DD_REG - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with any_int-sconsts genreg DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with genreg any_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact immediate_int-sconsts imm_cmp_int DD_REG - gen cmp_i %1, %2 - bxx[1] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 -with exact imm_cmp_int immediate_int-sconsts DD_REG - gen cmp_i %2, %1 - bxx[2] {slabel, 1f} - bset {zero_const, 0}, %3 - 1: yields %3 - -proc cmxtxx -with exact sconsts any_int - uses DD_REG=%1 - gen cmp_i %2, %a - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact any_int sconsts - uses DD_REG=%2 - gen cmp_i %1, %a - sxx[1] %a - neg_b %a - yields {extend1, %a} -with any_int-sconsts genreg - uses reusing %1,reusing %2,DD_REG - gen cmp_i %1, %2 - sxx[1] %a - neg_b %a - yields {extend1, %a} -with genreg any_int-sconsts - uses reusing %1,reusing %2,DD_REG - gen cmp_i %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact extend1 extend1 - uses reusing %1,reusing %2,DD_REG - gen cmp_b %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact extend2 extend2 - uses reusing %1,reusing %2,DD_REG - gen cmp_w %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact immediate_int-sconsts imm_cmp_int - uses reusing %2,DD_REG - gen cmp_i %1, %2 - sxx[1] %a - neg_b %a - yields {extend1, %a} -with exact imm_cmp_int immediate_int-sconsts - uses reusing %1,DD_REG - gen cmp_i %2, %1 - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact immediate_int-sconsts STACK - uses DD_REG - gen cmp_i %1, {post_inc_int, sp} - sxx[1] %a - neg_b %a - yields {extend1, %a} -with exact any_int STACK - uses reusing %1,DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - sxx[2] %a - neg_b %a - yields {extend1, %a} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - sxx[2] %a - neg_b %a - yields {extend1, %a} - -pat cmi tlt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("blt","bgt") -pat cmi tle and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("ble","bge") -pat cmi teq and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("beq","beq") -pat cmi tne and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bne","bne") -pat cmi tge and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bge","ble") -pat cmi tgt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bgt","blt") - -pat cmu tlt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bcs","bhi") -pat cmu tle and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bls","bcc") -pat cmu teq and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("beq","beq") -pat cmu tne and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bne","bne") -pat cmu tge and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bcc","bls") -pat cmu tgt and $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxand("bhi","bcs") - -pat cmi tlt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bge","ble") -pat cmi tle ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bgt","blt") -pat cmi teq ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bne","bne") -pat cmi tne ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("beq","beq") -pat cmi tge ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("blt","bgt") -pat cmi tgt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("ble","bge") - -pat cmu tlt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bcc","bls") -pat cmu tle ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bhi","bcs") -pat cmu teq ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bne","bne") -pat cmu tne ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("beq","beq") -pat cmu tge ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bcs","bhi") -pat cmu tgt ior $1==WORD_SIZE && $3==WORD_SIZE call cmxtxxior("bls","bcc") - -pat cmi tlt $1==WORD_SIZE call cmxtxx("slt","sgt") -pat cmi tle $1==WORD_SIZE call cmxtxx("sle","sge") -pat cmi teq $1==WORD_SIZE call cmxtxx("seq","seq") -pat cmi tne $1==WORD_SIZE call cmxtxx("sne","sne") -pat cmi tge $1==WORD_SIZE call cmxtxx("sge","sle") -pat cmi tgt $1==WORD_SIZE call cmxtxx("sgt","slt") - -pat cmu tlt $1==WORD_SIZE call cmxtxx("scs","shi") -pat cmu tle $1==WORD_SIZE call cmxtxx("sls","scc") -pat cmu teq $1==WORD_SIZE call cmxtxx("seq","seq") -pat cmu tne $1==WORD_SIZE call cmxtxx("sne","sne") -pat cmu tge $1==WORD_SIZE call cmxtxx("scc","sls") -pat cmu tgt $1==WORD_SIZE call cmxtxx("shi","scs") - - -proc cmuzxx example cmu zlt -with exact sconsts any_int - kills ALL - uses DD_REG=%1 - gen cmp_i %2, %a - bxx[2] {llabel, $2} -with exact any_int sconsts - kills ALL - uses DD_REG=%2 - gen cmp_i %1, %a - bxx[1] {llabel, $2} -with any_int-sconsts genreg STACK - gen cmp_i %1, %2 - bxx[1] {llabel, $2} -with genreg any_int-sconsts STACK - gen cmp_i %2, %1 - bxx[2] {llabel, $2} -with exact immediate_int-sconsts imm_cmp_int - kills ALL - gen cmp_i %1, %2 - bxx[1] {llabel, $2} -with exact imm_cmp_int immediate_int-sconsts - kills ALL - gen cmp_i %2, %1 - bxx[2] {llabel, $2} -with exact immediate_int-sconsts STACK - gen cmp_i %1, {post_inc_int, sp} - bxx[1] {llabel, $2} -with exact any_int STACK - uses reusing %1, DD_REG=%1 - gen cmp_i {post_inc_int, sp}, %a - bxx[2] {llabel, $2} -with exact STACK - uses DD_REG - gen move_i {post_inc_int, sp},%a - cmp_i {post_inc_int, sp},%a - bxx[2] {llabel, $2} -with data2-sconsts dreg2 STACK - gen cmp_w %1, %2 - bxx[1] {llabel, $2} -with dreg2 data2-conreg2-sconsts STACK - gen cmp_w %2, %1 - bxx[2] {llabel, $2} -with data1 dreg1 STACK - gen cmp_b %1, %2 - bxx[1] {llabel, $2} -with dreg1 data1-conreg1 STACK - gen cmp_b %2, %1 - bxx[2] {llabel, $2} - -pat cmu zlt $1==WORD_SIZE call cmuzxx("bcs","bhi") -pat cmu zle $1==WORD_SIZE call cmuzxx("bls","bcc") -pat cmu zeq $1==WORD_SIZE call cmuzxx("beq","beq") -pat cmu zne $1==WORD_SIZE call cmuzxx("bne","bne") -pat cmu zge $1==WORD_SIZE call cmuzxx("bcc","bls") -pat cmu zgt $1==WORD_SIZE call cmuzxx("bhi","bcs") - - -#if TBL68881 -proc cmf4zxx example cmf zlt -with FS_REG FS_REG - gen fcmp %1,%2 - bxx* {llabel, $2} - -pat cmf zlt $1==4 call cmf4zxx("fblt") -pat cmf zle $1==4 call cmf4zxx("fble") -pat cmf zne $1==4 call cmf4zxx("fbne") -pat cmf zeq $1==4 call cmf4zxx("fbeq") -pat cmf zge $1==4 call cmf4zxx("fbge") -pat cmf zgt $1==4 call cmf4zxx("fbgt") - -proc cmf8zxx example cmf zlt -with FD_REG FD_REG - gen fcmp %1,%2 - bxx* {llabel, $2} - -pat cmf zlt $1==8 call cmf8zxx("fblt") -pat cmf zle $1==8 call cmf8zxx("fble") -pat cmf zne $1==8 call cmf8zxx("fbne") -pat cmf zeq $1==8 call cmf8zxx("fbeq") -pat cmf zge $1==8 call cmf8zxx("fbge") -pat cmf zgt $1==8 call cmf8zxx("fbgt") -#endif - - -proc loc1locciibxx example loc loc cii bne -with any1 extend1 STACK - gen cmp_b %1,%2 - bxx[1] {llabel, $4} -with any1 any_int STACK - uses reusing %1, DD_REG = %1 -#if TBL68020 && WORD_SIZE==4 - gen extb_l %a -#else - gen ext_w %a -#if WORD_SIZE==4 - ext_l %a -#endif -#endif - cmp_i %2,%a - bxx[2] {llabel, $4} - -pat loc loc cii blt $1==1 && $2==EM_WSIZE call loc1locciibxx("blt","bgt") -pat loc loc cii ble $1==1 && $2==EM_WSIZE call loc1locciibxx("ble","bge") -pat loc loc cii bne $1==1 && $2==EM_WSIZE call loc1locciibxx("bne","bne") -pat loc loc cii beq $1==1 && $2==EM_WSIZE call loc1locciibxx("beq","beq") -pat loc loc cii bge $1==1 && $2==EM_WSIZE call loc1locciibxx("bge","ble") -pat loc loc cii bgt $1==1 && $2==EM_WSIZE call loc1locciibxx("bgt","blt") - -#if WORD_SIZE==4 -proc loc2locciibxx example loc loc cii bne -with any2 extend2 STACK - gen cmp_w %1,%2 - bxx[1] {llabel, $4} -with any2 any4 STACK - uses reusing %1, DD_REG = %1 - gen ext_l %a - cmp_l %2,%a - bxx[2] {llabel, $4} - -pat loc loc cii blt $1==2 && $2==EM_WSIZE call loc2locciibxx("blt","bgt") -pat loc loc cii blt $1==2 && $2==EM_WSIZE call loc2locciibxx("blt","bgt") -pat loc loc cii ble $1==2 && $2==EM_WSIZE call loc2locciibxx("ble","bge") -pat loc loc cii bne $1==2 && $2==EM_WSIZE call loc2locciibxx("bne","bne") -pat loc loc cii beq $1==2 && $2==EM_WSIZE call loc2locciibxx("beq","beq") -pat loc loc cii bge $1==2 && $2==EM_WSIZE call loc2locciibxx("bge","ble") -pat loc loc cii bgt $1==2 && $2==EM_WSIZE call loc2locciibxx("bgt","blt") -#endif - -proc bxx1_in example loc loc cii loc bne -with imm_cmp1 STACK - gen cmp_b {const, low8($4)}, %1 - bxx* {llabel, $5} - -#if WORD_SIZE!=2 -proc bxx2_in example loc loc cii loc bne -with imm_cmp2 STACK - gen cmp_w {const, loww($4)}, %1 - bxx* {llabel, $5} -#endif - -proc bxx1_small example loc bne -with imm_cmp1-D_REG STACK - gen cmp_b {const, $1}, %1 - bxx[1] {llabel, $2} -with imm_cmp2-D_REG STACK - gen cmp_w {const, $1}, %1 - bxx[1] {llabel, $2} -with data_int STACK -uses DD_REG = {small_const, $1} /* uses moveq */ - gen cmp_i %1,%a - bxx[2] {llabel, $2} - -#if WORD_SIZE!=2 -proc bxx2_small example loc bne -with imm_cmp2-D_REG STACK - gen cmp_w {const, $1}, %1 - bxx[1] {llabel, $2} -with imm_cmp4 STACK - gen cmp_l {const, $1}, %1 - bxx[2] {llabel, $2} -#endif - -proc zxx1_in example loc loc cii zne -with test_set1 STACK - gen test %1 - bxx* {llabel, $4} -with D_REG STACK - gen test {dreg1, %1} - bxx* {llabel, $4} - -#if WORD_SIZE!=2 -proc zxx2_in example loc loc cii zne -with test_set2 STACK - gen test %1 - bxx* {llabel, $4} -with D_REG STACK - gen test {dreg2, %1} - bxx* {llabel, $4} -#endif - -pat loc loc cii zlt $1==1 && $2==WORD_SIZE call zxx1_in("blt") -pat loc loc cii zle $1==1 && $2==WORD_SIZE call zxx1_in("ble") -pat loc loc cii zne $1==1 && $2==WORD_SIZE call zxx1_in("bne") -pat loc loc cii zeq $1==1 && $2==WORD_SIZE call zxx1_in("beq") -pat loc loc cii zge $1==1 && $2==WORD_SIZE call zxx1_in("bge") -pat loc loc cii zgt $1==1 && $2==WORD_SIZE call zxx1_in("bgt") - -#if WORD_SIZE!=2 -pat loc loc cii zlt $1==2 && $2==4 call zxx2_in("blt") -pat loc loc cii zle $1==2 && $2==4 call zxx2_in("ble") -pat loc loc cii zne $1==2 && $2==4 call zxx2_in("bne") -pat loc loc cii zeq $1==2 && $2==4 call zxx2_in("beq") -pat loc loc cii zge $1==2 && $2==4 call zxx2_in("bge") -pat loc loc cii zgt $1==2 && $2==4 call zxx2_in("bgt") -#endif - -pat loc loc cii loc blt $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("blt") -pat loc loc cii loc ble $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("ble") -pat loc loc cii loc beq $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("beq") -pat loc loc cii loc bne $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bne") -pat loc loc cii loc bge $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bge") -pat loc loc cii loc bgt $1==1 && $2==WORD_SIZE && in_1($4) call bxx1_in("bgt") - -#if WORD_SIZE!=2 -pat loc loc cii loc blt $1==2 && $2==4 && in_2($4) call bxx2_in("blt") -pat loc loc cii loc ble $1==2 && $2==4 && in_2($4) call bxx2_in("ble") -pat loc loc cii loc beq $1==2 && $2==4 && in_2($4) call bxx2_in("beq") -pat loc loc cii loc bne $1==2 && $2==4 && in_2($4) call bxx2_in("bne") -pat loc loc cii loc bge $1==2 && $2==4 && in_2($4) call bxx2_in("bge") -pat loc loc cii loc bgt $1==2 && $2==4 && in_2($4) call bxx2_in("bgt") -#endif - -/* the second instruction for bxx1_small is the other way around! */ -pat loc blt $1>=0 && $1<128 call bxx1_small("bcs", "bgt") -pat loc ble $1>=0 && $1<128 call bxx1_small("bls", "bge") -pat loc beq $1>=0 && $1<128 call bxx1_small("beq", "beq") -pat loc bne $1>=0 && $1<128 call bxx1_small("bne", "bne") -pat loc bge $1>=0 && $1<128 call bxx1_small("bcc", "ble") -pat loc bgt $1>=0 && $1<128 call bxx1_small("bhi", "blt") - -#if WORD_SIZE!=2 -pat loc blt $1>=128 && $1<32768 call bxx2_small("bcs", "blt") -pat loc ble $1>=128 && $1<32768 call bxx2_small("bls", "ble") -pat loc beq $1>=128 && $1<32768 call bxx2_small("beq", "beq") -pat loc bne $1>=128 && $1<32768 call bxx2_small("bne", "bne") -pat loc bge $1>=128 && $1<32768 call bxx2_small("bcc", "bge") -pat loc bgt $1>=128 && $1<32768 call bxx2_small("bhi", "bgt") -#endif - - -pat loc loc cii lal sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lal $4 sti $5 -pat loc loc cii lol sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lol $4 sti $5 -pat loc loc cii lil sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lil $4 sti $5 -pat loc loc cii LLP lof sti $1 <= WORD_SIZE && $1>=$6 && $2==WORD_SIZE - leaving LLP $4 lof $5 sti $6 -pat loc loc cii lae sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving lae $4 sti $5 -pat loc loc cii loe sti $1 <= WORD_SIZE && $1>=$5 && $2==WORD_SIZE - leaving loe $4 sti $5 - -pat loc loc cii stl $1==1 && $2==WORD_SIZE && inreg($4)==reg_any -with memory1+DD_REG - kills regvar($4, reg_any), use_index %xreg==regvar($4, reg_any) - gen move_b %1, {dreg1, regvar($4,reg_any)} -#if WORD_SIZE==2 - ext_w {LOCAL,$4} -#else -#ifdef TBL68020 - extb_l {LOCAL,$4} -#else /* TBL68020 */ - ext_w {LOCAL,$4} - ext_l {LOCAL,$4} -#endif /* TBL68020 */ -#endif - -pat loc loc cii $1==2 && $2==4 -#if WORD_SIZE==2 -with D_REG -uses reusing %1, DD_REG4 - gen move %1,%a.1 yields {extend2, %a} -with exact extend1 - uses reusing %1,DD_REG4 - gen move %1.reg,%a.1 yields {extend1_4, %a} -with exact memory2 -uses reusing %1,DD_REG4 - gen move %1, %a.1 yields {extend2, %a} -#else -with DD_REG yields {extend2, %1} -with exact memory2 -uses reusing %1,DD_REG=%1 - yields {extend2, %a} -#endif - -pat loc loc cii $1==1 && $2==WORD_SIZE -with DD_REG yields {extend1, %1} -with exact memory1 -uses reusing %1,DD_REG = %1 - yields {extend1, %a} - -#if WORD_SIZE==2 -pat loc loc cii $1==1 && $2==4 -with DD_REG -uses reusing %1, DD_REG4 - gen move %1, %a.1 - yields {extend1_4, %a} -with exact memory1 -uses reusing %1,DD_REG4 - gen move %1,%a.1 yields {extend1_4, %a} -#endif - -pat loc loc ciu $1==$2 /* skip this */ -pat loc loc cui $1==$2 /* skip this */ - - -/* The following rules should be handled by the peephole optimizer, I think */ - -#if WORD_SIZE==2 -pat ldc dvu highw($1)==0 && loww($1)==2 && $2==4 leaving loc 1 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==4 && $2==4 leaving loc 2 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==8 && $2==4 leaving loc 3 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==16 && $2==4 leaving loc 4 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==32 && $2==4 leaving loc 5 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==64 && $2==4 leaving loc 6 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==128 && $2==4 leaving loc 7 sru 4 -pat ldc dvu highw($1)==0 && loww($1)==256 && $2==4 leaving loc 8 sru 4 -#endif - -pat loc dvu $1==2 && $2==WORD_SIZE leaving loc 1 sru WORD_SIZE -pat loc dvu $1==4 && $2==WORD_SIZE leaving loc 2 sru WORD_SIZE -pat loc dvu $1==8 && $2==WORD_SIZE leaving loc 3 sru WORD_SIZE -pat loc dvu $1==16 && $2==WORD_SIZE leaving loc 4 sru WORD_SIZE -pat loc dvu $1==32 && $2==WORD_SIZE leaving loc 5 sru WORD_SIZE -pat loc dvu $1==64 && $2==WORD_SIZE leaving loc 6 sru WORD_SIZE -pat loc dvu $1==128 && $2==WORD_SIZE leaving loc 7 sru WORD_SIZE -pat loc dvu $1==256 && $2==WORD_SIZE leaving loc 8 sru WORD_SIZE - -#if WORD_SIZE==2 -pat ldc dvi highw($1)==0 && loww($1)==2 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 1 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==4 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 2 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==8 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 3 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==16 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 4 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==32 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 5 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==64 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 6 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==128 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 7 sri 4 - -pat ldc dvi highw($1)==0 && loww($1)==256 && $2==4 - with DD_REG4 - gen test %1 - bpl {slabel,1f} - add_l {const4,loww($1)-1},%1 - 1: yields %1 leaving loc 8 sri 4 -#endif /* WORD_SIZE==2 */ - -pat loc dvi $1==2 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 1 sri WORD_SIZE - -pat loc dvi $1==4 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 2 sri WORD_SIZE - -pat loc dvi $1==8 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 3 sri WORD_SIZE - -pat loc dvi $1==16 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 4 sri WORD_SIZE - -pat loc dvi $1==32 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 5 sri WORD_SIZE - -pat loc dvi $1==64 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 6 sri WORD_SIZE - -pat loc dvi $1==128 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 7 sri WORD_SIZE - -pat loc dvi $1==256 && $2==WORD_SIZE - with DD_REG - gen test %1 - bpl {slabel,1f} - add_i {const,$1-1},%1 - 1: yields %1 leaving loc 8 sri WORD_SIZE - -/* The rest is all 2-bytes stuff */ -#if WORD_SIZE==2 -pat loc loc cii $1==4 && $2==2 -with D_REG4 - yields %1.1 -with any2-pre_post any2-pre_post - yields %2 - -proc cmqtxx -with exact sconsts4 any4 - uses DD_REG4=%1 - gen cmp_l %2, %a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact any4 sconsts4 - uses DD_REG4=%2 - gen cmp_l %1, %a - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with any4-sconsts4 genreg4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_l %1, %2 - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with genreg4 any4-sconsts4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_l %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact extend1_4 extend1_4 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_b %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact extend2 extend2 - uses reusing %1,reusing %2,DD_REG4 - gen cmp_w %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact immediate4-sconsts4 imm_cmp4 - uses reusing %2,DD_REG4 - gen cmp_l %1, %2 - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact imm_cmp4 immediate4-sconsts4 - uses reusing %1,DD_REG4 - gen cmp_l %2, %1 - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact immediate4-sconsts4 STACK - uses DD_REG4 - gen cmp_l %1, {post_inc4, sp} - s4xx[1] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact any4 STACK - uses reusing %1,DD_REG4=%1 - gen cmp_l {post_inc4, sp}, %a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} -with exact STACK - uses DD_REG4 - gen move_l {post_inc4, sp},%a - cmp_l {post_inc4, sp},%a - s4xx[2] %a - neg_b %a.1 - yields {extend1, %a.1} - -pat cmi tlt $1==4 call cmqtxx("slt","sgt") -pat cmi tle $1==4 call cmqtxx("sle","sge") -pat cmi teq $1==4 call cmqtxx("seq","seq") -pat cmi tne $1==4 call cmqtxx("sne","sne") -pat cmi tge $1==4 call cmqtxx("sge","sle") -pat cmi tgt $1==4 call cmqtxx("sgt","slt") - -pat cmu tlt $1==4 call cmqtxx("scs","shi") -pat cmu tle $1==4 call cmqtxx("sls","scc") -pat cmu teq $1==4 call cmqtxx("seq","seq") -pat cmu tne $1==4 call cmqtxx("sne","sne") -pat cmu tge $1==4 call cmqtxx("scc","sls") -pat cmu tgt $1==4 call cmqtxx("shi","scs") - - -proc cmqzxx example cmu zlt -with zero_const4 test_set4 STACK - /* kills ALL */ - gen test %2 - bxx[1] {llabel, $2} -with exact sconsts4-zero_const4 any4 - kills ALL - uses DD_REG4=%1 - gen cmp_l %2, %a - bxx[2] {llabel, $2} -with exact any4 sconsts4 - kills ALL - uses DD_REG4=%2 - gen cmp_l %1, %a - bxx[1] {llabel, $2} -with any4-sconsts4-zero_const4 genreg4 STACK - gen cmp_l %1, %2 - bxx[1] {llabel, $2} -with genreg4 any4-sconsts4-zero_const4 STACK - gen cmp_l %2, %1 - bxx[2] {llabel, $2} -with exact immediate4-sconsts4-zero_const4 imm_cmp4 - kills ALL - gen cmp_l %1, %2 - bxx[1] {llabel, $2} -with exact imm_cmp4 immediate4-sconsts4-zero_const4 - kills ALL - gen cmp_l %2, %1 - bxx[2] {llabel, $2} -with exact immediate4-sconsts4-zero_const4 STACK - gen cmp_l %1, {post_inc4, sp} - bxx[1] {llabel, $2} -with exact any4 STACK - uses reusing %1, DD_REG4=%1 - gen cmp_l {post_inc4, sp}, %a - bxx[2] {llabel, $2} -with exact STACK - uses DD_REG4 - gen move_l {post_inc4, sp},%a - cmp_l {post_inc4, sp},%a - bxx[2] {llabel, $2} -with data2-sconsts dreg2 STACK - gen cmp_w %1, %2 - bxx[1] {llabel, $2} -with dreg2 data2-conreg2-sconsts STACK - gen cmp_w %2, %1 - bxx[2] {llabel, $2} -with data1 dreg1 STACK - gen cmp_b %1, %2 - bxx[1] {llabel, $2} -with dreg1 data1-conreg1 STACK - gen cmp_b %2, %1 - bxx[2] {llabel, $2} - -pat cmi zlt $1==4 call cmqzxx("blt","bgt") -pat cmi zle $1==4 call cmqzxx("ble","bge") -pat cmi zeq $1==4 call cmqzxx("beq","beq") -pat cmi zne $1==4 call cmqzxx("bne","bne") -pat cmi zge $1==4 call cmqzxx("bge","ble") -pat cmi zgt $1==4 call cmqzxx("bgt","blt") - -pat cms zeq $1==4 call cmqzxx("beq","beq") -pat cms zne $1==4 call cmqzxx("bne","bne") - -pat cmu zlt $1==4 call cmqzxx("bcs","bhi") -pat cmu zle $1==4 call cmqzxx("bls","bcc") -pat cmu zeq $1==4 call cmqzxx("beq","beq") -pat cmu zne $1==4 call cmqzxx("bne","bne") -pat cmu zge $1==4 call cmqzxx("bcc","bls") -pat cmu zgt $1==4 call cmqzxx("bhi","bcs") - -pat ldc cms zeq loww($1)==0 && highw($1)==0 && $2==4 -with test_set4 STACK - gen test %1 - beq {llabel, $3} - -pat ldc cms zne loww($1)==0 && highw($1)==0 && $2==4 -with test_set4 STACK - gen test %1 - bne {llabel, $3} -#endif diff --git a/mach/ns/as/Makefile b/mach/ns/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/ns/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/ns/libem/Makefile b/mach/ns/libem/Makefile deleted file mode 100644 index 9f7b50d8d..000000000 --- a/mach/ns/libem/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=ns - -all: libem_o.a end.o - -install: all - ../../install libem_o.a tail_em - ../../install end.o end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.o end_em - -end.o: end.s - $(MACH) -I../../../h -c end.s - -libem_o.a: libem_s.a - ASAR=aal ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a nohup.out Out - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/end.s diff --git a/mach/ns/libem/compmodule b/mach/ns/libem/compmodule deleted file mode 100755 index adf99ccef..000000000 --- a/mach/ns/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if ns -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/ns/libem/end.s b/mach/ns/libem/end.s deleted file mode 100644 index 37e1cef2c..000000000 --- a/mach/ns/libem/end.s +++ /dev/null @@ -1,16 +0,0 @@ -.define endtext,enddata,endbss,_etext,_edata,_end -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .end ! only for declaration of _end and endbss. - - .sect .text -endtext: -_etext: - .sect .data -enddata: -_edata: - .sect .end -_end: -endbss: diff --git a/mach/ns/libem/mon.s b/mach/ns/libem/mon.s deleted file mode 100644 index 31773656f..000000000 --- a/mach/ns/libem/mon.s +++ /dev/null @@ -1,58 +0,0 @@ -.define .mon -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - - .sect .text - -.mon: - cmpd 1,4(sp) - beq 1f - cmpd 3,4(sp) - beq 3f - cmpd 4,4(sp) - beq 4f - cmpd 54,4(sp) - beq 5f - - movd .add1, tos - jsr @.prstr - movd 4(sp), tos - jsr @.print - movd .add2, tos - jsr @.prstr - ret 4 - -1: jump @.stop - -3: save [r0,r1,r2,r3] - movd 3,r0 - movd 28(sp),r1 - movd 32(sp),r2 - movd 0,r3 - svc - movd r2, 32(sp) - movd 0,28(sp) - restore [r0,r1,r2,r3] - ret 8 - -4: save [r0,r1,r2,r3] - movd 4,r0 - movd 28(sp),r1 - movd 32(sp),r2 - movd 0,r3 - svc - movd r2, 32(sp) - movd 0,28(sp) - restore [r0,r1,r2,r3] - ret 8 - -5: movd 0, 16(sp) - ret 12 - -.sect .data -.add1: .asciz "monitor call " -.add2: .asciz " not implemented\n" -.align diff --git a/mach/ns/libsys/Makefile b/mach/ns/libsys/Makefile deleted file mode 100644 index 955ce97d5..000000000 --- a/mach/ns/libsys/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# $Header$ -MACH=ns -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a nohup.out Out - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @ar pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/ns/libsys/compmodule b/mach/ns/libsys/compmodule deleted file mode 100755 index e32bc096e..000000000 --- a/mach/ns/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if ns -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/ns/ncg/Makefile b/mach/ns/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/ns/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/pdp/as/Makefile b/mach/pdp/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/pdp/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/pdp/cg/Makefile b/mach/pdp/cg/Makefile deleted file mode 100644 index 22f5f603c..000000000 --- a/mach/pdp/cg/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -# $Header$ - -EMHOME=../../.. -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-hbxac -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/cg -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \ - $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \ - $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\ - move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - ../../install cg - -cmp: all - -../../compare cg - -distr: tables.c - rm -f tables1.[ch] - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - - -tables.c: table - -mv tables.h tables.h.save - $(EMHOME)/lib/cpp -P table | $(EMHOME)/lib/cgg > debug.out - -if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi - -if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) -clean: - rm -f *.o tables.c tables.h debug.out cg tables.h.save - -codegen.o: $(CDIR)/assert.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -move.o: $(CDIR)/assert.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/pdp/cg/peep.c b/mach/pdp/cg/peep.c deleted file mode 100644 index 32d0d040b..000000000 --- a/mach/pdp/cg/peep.c +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef NORCSID -static char rcsid[] = "$Header$"; -#endif - -#include - -/* - * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. - * - * This product is part of the Amsterdam Compiler Kit. - * - * Permission to use, sell, duplicate or disclose this software must be - * obtained in writing. Requests for such permissions may be sent to - * - * Dr. Andrew S. Tanenbaum - * Wiskundig Seminarium - * Vrije Universiteit - * Postbox 7161 - * 1007 MC Amsterdam - * The Netherlands - * - * Author: Hans van Staveren - */ - -char buf[512]; -char *index(); - -main() { - register n,sa; - register char *p; - - sa=0; - for (;;) { - getline(buf); - if (n=stackadjust()) { - sa += n; - continue; - } - if (nullinstruction()) - continue; - if (sa) { - if (buf[0]=='t' && buf[1]=='s' && buf[2]=='t' && buf[3]==' ') { - sa -= 2; - buf[0]='m'; - buf[1]='o'; - buf[2]='v'; - strcat(buf,",(sp)+"); - } else if (buf[0]=='m' && buf[1]=='o' && buf[2]=='v' && - buf[3]==' ' && (p=index(&buf[5],','))!=0 && - p[1]=='-' && p[2]=='(' && p[3]=='s') { - sa -= 2; - p[1]=' '; - } - } - switch(sa) { - case 0:break; - case 2:puts("tst (sp)+");sa=0;break; - case 4:puts("cmp (sp)+,(sp)+");sa=0;break; - case 6:puts("add $06,sp");sa=0;break; - } - puts(buf); - } -} - -getline(buf) register char *buf; { - register c; - - while ((c=getchar())==' ' || c=='\t') - ; - if (c==EOF) - exit(0); - do *buf++=c; - while ((c=getchar())!='\n'); - *buf=0; -} - -stackadjust() { - - if (buf[0]=='t' && - buf[1]=='s' && - buf[2]=='t' && - buf[3]==' ' && - buf[4]=='(' && - buf[5]=='s' && - buf[6]=='p' && - buf[7]==')' && - buf[8]=='+') return(2); - if (buf[0]=='c' && - buf[1]=='m' && - buf[2]=='p' && - buf[3]==' ' && - buf[4]=='(' && - buf[5]=='s' && - buf[6]=='p' && - buf[7]==')' && - buf[8]=='+' && - buf[9]==',' && - buf[10]=='(' && - buf[11]=='s' && - buf[12]=='p' && - buf[13]==')' && - buf[14]=='+') return(4); - if (buf[0]=='a' && - buf[1]=='d' && - buf[2]=='d' && - buf[3]==' ' && - buf[4]=='$' && - buf[5]=='0' && - buf[6]=='6' && - buf[7]==',' && - buf[8]=='s' && - buf[9]=='p' && - buf[10]==0) return(6); - return(0); -} - -nullinstruction() { - register char *p; - - if (buf[4]=='$' && buf[5]=='0' && buf[6]=='0' && buf[7]==',') { - p=index(buf,'-'); - if (p!=0 && p[1]=='(') - return(0); - p=index(buf,'+'); - if (p!=0 && p[-1]==')') - return(0); - if (buf[0]=='b' && buf[1]=='i' && (buf[2]=='s' || buf[2]=='c')) - return(1); - if (buf[0]=='a' && buf[1]=='d' && buf[2]=='d') - return(1); - if (buf[0]=='s' && buf[1]=='u' && buf[2]=='b') - return(1); - } - return(0); -} diff --git a/mach/pdp/cv/Makefile b/mach/pdp/cv/Makefile deleted file mode 100644 index 5cfa97a6a..000000000 --- a/mach/pdp/cv/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - ../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/pdp/int/Makefile b/mach/pdp/int/Makefile deleted file mode 100644 index d689fb262..000000000 --- a/mach/pdp/int/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -INTS=em_t--- em_---- em_tf-- em_t-c- em_t--p -b=../../../lib/em22 - -all: $(INTS) eminform em - -em: em.c - $(CC) -o em -I../../../h em.c - -eminform: eminform.s - as eminform.s;ld -i -o eminform a.out -lc - -em_t---: t+ f- c- p- em_int.s - as t+ f- c- p- em_int.s;ld -i -o em_t--- a.out -lc - -em_----: t- f- c- p- em_int.s - as t- f- c- p- em_int.s;ld -i -o em_---- a.out -lc - -em_tf--: t+ f+ c- p- em_int.s - as t+ f+ c- p- em_int.s;ld -i -o em_tf-- a.out -lc - -em_t-c-: t+ f- c+ p- em_int.s - as t+ f- c+ p- em_int.s;ld -i -o em_t-c- a.out -lc - -em_t--p: t+ f- c- p+ em_int.s - as t+ f- c- p+ em_int.s;ld -i -o em_t--p a.out -lc - -install: all - -mkdir $b - cp em_???? $b - cp em eminform ../../../bin - cp em.1 eminform.1 ../../../man - -cmp: all - -cmp em_t--- $b/em_t--- - -cmp em_---- $b/em_---- - -cmp em_tf-- $b/em_tf-- - -cmp em_t-c- $b/em_t-c- - -cmp em_t--p $b/em_t--p - -cmp em ../../../bin/em - -cmp eminform ../../../bin/eminform - -cmp em.1 ../../../man/em.1 - -cmp eminform.1 ../../../man/eminform.1 - -clean: - -rm -f *.o *.old a.out em eminform $(INTS) - -opr: - make pr | opr - -pr: - @pr em.c em_int.s eminform.s diff --git a/mach/pdp/libem/Makefile b/mach/pdp/libem/Makefile deleted file mode 100644 index d4a42a35d..000000000 --- a/mach/pdp/libem/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -all: head_em.o libem_o.a end.o - -install: cp - -cp: all - ../../install head_em.o head_em - ../../install libem_o.a tail_em - ../../install end.o end_em - -cmp: all - -../../compare head_em.o head_em - -../../compare libem_o.a tail_em - -../../compare end.o end_em - - -head_em.o: head_em.s - pdp -c head_em.s - -end.o: end.s - pdp -c end.s - -libem_o.a: libem_s.a - ASAR=aal ; export ASAR ; march . libem_o.a - -clean: - rm -f *.o libem_o.a - -opr: - make pr | opr - -pr: - @pr `pwd`/Makefile `pwd`/head_em.s - @arch pv libem_s.a | pr -h `pwd`/libem_s.a diff --git a/mach/pdp/libem/blm.s b/mach/pdp/libem/blm.s deleted file mode 100644 index ea55f5f13..000000000 --- a/mach/pdp/libem/blm.s +++ /dev/null @@ -1,29 +0,0 @@ -/ $Header$ -.globl blm~ -.globl save~,retu~ - -/ Size in r0 -blm~: - jsr pc,save~ - mov (sp)+,r2 - mov (sp)+,r3 - mov r0,r1 - asr r0 - beq 2f -/ Now avoid wrong copy. -/ The pieces may overlap ! - cmp r3,r2 - beq 2f - blt 3f -1: - mov (r3)+,(r2)+ - sob r0,1b -2: - jmp retu~ -3: - add r1,r3 - add r1,r2 -4: - mov -(r3),-(r2) - sob r0,4b - br 2b diff --git a/mach/pdp/libem/compmodule b/mach/pdp/libem/compmodule deleted file mode 100755 index e6e7c76e6..000000000 --- a/mach/pdp/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if pdp -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/pdp/libem/end.s b/mach/pdp/libem/end.s deleted file mode 100644 index 37e1cef2c..000000000 --- a/mach/pdp/libem/end.s +++ /dev/null @@ -1,16 +0,0 @@ -.define endtext,enddata,endbss,_etext,_edata,_end -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .end ! only for declaration of _end and endbss. - - .sect .text -endtext: -_etext: - .sect .data -enddata: -_edata: - .sect .end -_end: -endbss: diff --git a/mach/pdp/libem/head_em.s b/mach/pdp/libem/head_em.s deleted file mode 100644 index 00900d172..000000000 --- a/mach/pdp/libem/head_em.s +++ /dev/null @@ -1,75 +0,0 @@ -# -.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text -.define LINO_AD,FILN_AD -.define ERANGE,ESET,EHEAP,EILLINS,ECASE -.define hol0,trppc~,trpim~,reghp~,.limhp -! $Header$ - -#define float 1 -#define hardfp 1 - -LINO_AD = 0 -FILN_AD = 4 - -ERANGE = 1 -ESET = 2 -EFOVFL = 4 -EFUNFL = 5 -EFDIVZ = 7 -EFUND = 011 -ECONV = 012 -EHEAP = 021 -EILLINS = 022 -ECASE = 024 - -#ifdef float -#ifndef hardfp -! sys 060;.data2 4,fptrap / if not commented it will appear as undefined -#endif - sys 060;.data2 010,sig8 - ldfps $07600 -#endif - mov 2(sp),r0 - clr -2(r0) - mov sp,r0 - sub $4,sp - mov 4(sp),(sp) - tst (r0)+ - mov r0,2(sp) -1: - tst (r0)+ - bne 1b - cmp r0,*2(sp) - blo 1f - tst -(r0) -1: - mov r0,4(sp) - jsr pc,__m_a_i_n -! next two lines for as long as tail needs printf -! mov r0,-(sp) -! jsr pc,*$_exit - sys 1 - - .sect .data -hol0: .data2 0,0 ! line no - .data2 0,0 ! file -trppc~: .data2 0 -trpim~: .data2 0 -reghp~: .data2 _end -.limhp: .data2 _end - - .sect .text -sig8: -#ifdef float - mov r0,-(sp) - stst r0 - mov 1f(r0),-(sp) - jsr pc,trp~ - sys 060;.data2 010,sig8 - mov (sp)+,r0 - rti - - .sect .data -1: .data2 EILLINS, EILLINS, EFDIVZ, ECONV, EFOVFL, EFUNFL, EFUND, EILLINS - .sect .text -#endif diff --git a/mach/pdp/libem/hlt.s b/mach/pdp/libem/hlt.s deleted file mode 100644 index 0fae864f9..000000000 --- a/mach/pdp/libem/hlt.s +++ /dev/null @@ -1,12 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text -.sect .text -.define hlt~ -! $Header$ - -exit = 1 - -hlt~: - mov (sp)+,r0 - bne 1f - sys exit -1: .data2 4 diff --git a/mach/pdp/libem/sigtrp.s b/mach/pdp/libem/sigtrp.s deleted file mode 100644 index 214826a7c..000000000 --- a/mach/pdp/libem/sigtrp.s +++ /dev/null @@ -1,93 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text -.sect .text -.define sigtrp~ -.define trp~,save~,retu~ -! $Header$ - -indir = 0 -signal = 060 - -sig1: mov sig.trp+0,-(sp) - br 1f -sig2: mov sig.trp+2,-(sp) - br 1f -sig3: mov sig.trp+4,-(sp) - br 1f -sig4: mov sig.trp+6,-(sp) - br 1f -sig5: mov sig.trp+010,-(sp) - br 1f -sig6: mov sig.trp+012,-(sp) - br 1f -sig7: mov sig.trp+014,-(sp) - br 1f -sig10: mov sig.trp+022,-(sp) - br 1f -sig11: mov sig.trp+024,-(sp) - br 1f -sig12: mov sig.trp+026,-(sp) - br 1f -sig13: mov sig.trp+030,-(sp) - br 1f -sig14: mov sig.trp+032,-(sp) - br 1f -sig15: mov sig.trp+034,-(sp) - br 1f -sig16: mov sig.trp+036,-(sp) - br 1f -1: - jsr pc,trp~ - rti - -sigtrp~: - jsr pc,save~ - tst (sp)+ - mov (sp)+,r1 - mov (sp)+,r0 - ble sig.bad - cmp r0,$020 - bhi sig.bad - mov r0,call+02 - asl r0 - mov sig.trp-2(r0),r3 - cmp r1,$0400 - bhis 1f - mov sig.adr-2(r0),r2 - bne 2f -sig.bad: - mov $-1,r0 -sigbad: - mov r0,-(sp) - mov r0,-(sp) - jmp retu~ -1: cmp r1,$-3 - blo sig.bad - mov r1,r2 - inc r2 - inc r2 -2: mov r1,sig.trp-2(r0) - mov r2,call+04 - sys indir ; .data2 call - bcs sigbad - asr r0 - bcc 1f - mov $-3,-(sp) - clr -(sp) - jmp retu~ -1: mov r3,-(sp) - clr -(sp) - jmp retu~ - -.sect .data -call: sys signal - .data2 0, 0 -sig.trp: - .data2 -2, -2, -2, -2 - .data2 -2, -2, -2, -2 - .data2 -2, -2, -2, -2 - .data2 -2, -2, -2, -2 -sig.adr: - .data2 sig1, sig2, sig3, sig - .data2 sig5, sig6, sig7, 0 - .data2 0, sig10, sig11, sig12 - .data2 sig13, sig14, sig15, sig16 diff --git a/mach/pdp/libpc/makefile b/mach/pdp/libpc/makefile deleted file mode 100644 index ddc6a8e63..000000000 --- a/mach/pdp/libpc/makefile +++ /dev/null @@ -1,21 +0,0 @@ -MAKEFILE=../../proto/libg/Makefile -MACHDEF="MACH=pdp -Rbe-p2" "SUF=s" "ASAR=ar" -PCDEF="PREF=pc" "SUB=" "SRC=lang/pc/libpc" -LIBDIR=../lib - -install: - make -f $(MAKEFILE) $(PCDEF) $(MACHDEF) cp - -cmp: - make -f $(MAKEFILE) $(PCDEF) $(MACHDEF) all - cmp head_pc $(LIBDIR)/head_pc - cmp tail_pc $(LIBDIR)/tail_pc - -clean: - -rm -f *.old *.[ce$(SUF)] tail* head* - -opr: - make pr | opr - -pr: - @pr Makefile diff --git a/mach/pdp/libsys/Makefile b/mach/pdp/libsys/Makefile deleted file mode 100644 index 7e194f038..000000000 --- a/mach/pdp/libsys/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# $Header$ -all: libmon_o.a - -install: cp - -cp: all - ../../install libmon_o.a tail_mon - -cmp: all - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -clean: - rm -f *.o libmon_o.a - -opr: - make pr | opr - -pr: - @pr `pwd`/Makefile - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/pdp/libsys/compmodule b/mach/pdp/libsys/compmodule deleted file mode 100755 index da10f2f6d..000000000 --- a/mach/pdp/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if pdp -L -O -c -I../../../h -I. $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/pdp/ncg/Makefile b/mach/pdp/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/pdp/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/pdp/top/Makefile b/mach/pdp/top/Makefile deleted file mode 100644 index 57908427f..000000000 --- a/mach/pdp/top/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -EMHOME=../../.. -LIBS=$(EMHOME)/modules/lib/libstring.a -PREFLAGS=-I. -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -DNDEBUG -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -CDIR=$(EMHOME)/mach/proto/top -CFILES=$(CDIR)/top.c $(CDIR)/queue.c -OFILES=top.o queue.o - -all: gen.c - make top - -top: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LIBS) -o top - -top.o: $(CDIR)/top.c gen.c - $(CC) -c $(CFLAGS) $(CDIR)/top.c - -queue.o: $(CDIR)/queue.c - $(CC) -c $(CFLAGS) $(CDIR)/queue.c - -install: all - $(EMHOME)/mach/install top - -cmp: all - -$(EMHOME)/mach/compare top - -gen.c: table - $(EMHOME)/lib/topgen table - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) - -clean: - rm -f *.o gen.c gen.h top - -top.o: gen.h -top.o: $(CDIR)/top.h -top.o: $(CDIR)/queue.h -queue.o: $(CDIR)/queue.h diff --git a/mach/pmds/cv/Makefile b/mach/pmds/cv/Makefile deleted file mode 100644 index b5bf144f0..000000000 --- a/mach/pmds/cv/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -EMHOME=../../.. - -LDFLAGS = -CFLAGS=-O -I$(EMHOME)/h - -cv: cv.o - $(CC) -o cv $(LDFLAGS) cv.o $(EMHOME)/modules/lib/libobject.a - -install: cv - ../../install cv - -cmp: cv - -../../compare cv - -opr: - make pr | opr - -pr: - @pr `pwd`/cv.c - -clean: - -rm -f *.o *.old cv diff --git a/mach/pmds/cv/pdp_cv.c b/mach/pmds/cv/pdp_cv.c deleted file mode 100644 index b11f6574f..000000000 --- a/mach/pmds/cv/pdp_cv.c +++ /dev/null @@ -1,41 +0,0 @@ -/* The format of the a.out files produced by the assemblers - is machine dependent. - This program acts as a gateway between two machines and it's effect - is independent of the machine it executes on. - The a.out file is assumed to be made on a pdp-11 - while the target machine is a Philip Microcomputer Development system - -*/ - -#include - -main(argc,argv) char **argv ; { - char i_addr[4]; - short count; - char i_count[2]; - - if (argc != 3) { - fprintf(stderr,"Usage: %s pdp-a.out VU-pmds-a.out\n",argv[0]); - exit(-1); - } - if (freopen(argv[1],"r",stdin)==NULL) { - perror(argv[1]); - exit(-1); - } - if (freopen(argv[2],"w",stdout)==NULL) { - perror(argv[2]); - exit(-1); - } - while (fread(&i_addr,sizeof i_addr,1,stdin)==1) { - putchar(i_addr[1]) ; putchar(i_addr[0]) ; - putchar(i_addr[3]) ; putchar(i_addr[2]) ; - if (fread(&i_count,sizeof i_count,1,stdin)!=1) - exit(fprintf(stderr,"foo\n")); - putchar(i_count[1]) ; putchar(i_count[0]) ; - count= ((i_count[1]&0377)<<8) | (i_count[0]&0377) ; - while (count--) { - putchar(getchar()); - } - } - return 0; -} diff --git a/mach/pmds/cv/vax_cv.c b/mach/pmds/cv/vax_cv.c deleted file mode 100644 index 6e210f176..000000000 --- a/mach/pmds/cv/vax_cv.c +++ /dev/null @@ -1,41 +0,0 @@ -/* The format of the a.out files produced by the assemblers - is machine dependent. - This program acts as a gateway between two machines and it's effect - is independent of the machine it executes on. - The a.out file is assumed to be made on a vax-11 - while the target machine is a Philips Microcomputer Development system - -*/ - -#include - -main(argc,argv) char **argv ; { - char i_addr[4]; - short count; - char i_count[2]; - - if (argc != 3) { - fprintf(stderr,"Usage: %s vax-a.out VU-pmds-a.out\n",argv[0]); - exit(-1); - } - if (freopen(argv[1],"r",stdin)==NULL) { - perror(argv[1]); - exit(-1); - } - if (freopen(argv[2],"w",stdout)==NULL) { - perror(argv[2]); - exit(-1); - } - while (fread(&i_addr,sizeof i_addr,1,stdin)==1) { - putchar(i_addr[3]) ; putchar(i_addr[2]) ; - putchar(i_addr[1]) ; putchar(i_addr[0]) ; - if (fread(&i_count,sizeof i_count,1,stdin)!=1) - exit(fprintf(stderr,"foo\n")); - putchar(i_count[1]) ; putchar(i_count[0]) ; - count= ((i_count[1]&0377)<<8) | (i_count[0]&0377) ; - while (count--) { - putchar(getchar()); - } - } - return 0; -} diff --git a/mach/pmds/libsys/Makefile b/mach/pmds/libsys/Makefile deleted file mode 100644 index 1ae02d217..000000000 --- a/mach/pmds/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=pmds -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/pmds/libsys/compmodule b/mach/pmds/libsys/compmodule deleted file mode 100755 index 02a021735..000000000 --- a/mach/pmds/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if pmds -L -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/pmds4/libsys/Makefile b/mach/pmds4/libsys/Makefile deleted file mode 100644 index c796c26ef..000000000 --- a/mach/pmds4/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=pmds4 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/pmds4/libsys/compmodule b/mach/pmds4/libsys/compmodule deleted file mode 100755 index 8d98a6d81..000000000 --- a/mach/pmds4/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if pmds4 -L -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/proto/as/Makefile b/mach/proto/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/proto/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/proto/cg/Makefile b/mach/proto/cg/Makefile deleted file mode 100644 index 22f5f603c..000000000 --- a/mach/proto/cg/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -# $Header$ - -EMHOME=../../.. -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-hbxac -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/cg -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \ - $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \ - $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\ - move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - ../../install cg - -cmp: all - -../../compare cg - -distr: tables.c - rm -f tables1.[ch] - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - - -tables.c: table - -mv tables.h tables.h.save - $(EMHOME)/lib/cpp -P table | $(EMHOME)/lib/cgg > debug.out - -if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi - -if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) -clean: - rm -f *.o tables.c tables.h debug.out cg tables.h.save - -codegen.o: $(CDIR)/assert.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -move.o: $(CDIR)/assert.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/proto/fp/Makefile b/mach/proto/fp/Makefile deleted file mode 100644 index eddf2062a..000000000 --- a/mach/proto/fp/Makefile +++ /dev/null @@ -1,282 +0,0 @@ -EMHOME=../../.. -SUF=s -MACH=m68k4 -ASAR=arch -CFLAGS= -# must use -r option of make so that default rules -# are not loaded -# -# $Header$ -# -EMFLAGS= -L -LIB -I. -O $(CFLAGS) -# AS=ack -m$(MACH) -c.$(SUF) -# CC=ack -m$(MACH) -c.s -# CCFLAGS=$(EMFLAGS) -CDIR=$(EMHOME)/mach/proto/fp - -LIST = cff4.$(SUF) cff8.$(SUF)\ - cfu.$(SUF)\ - cmf4.$(SUF) cmf8.$(SUF)\ - cuf4.$(SUF) cuf8.$(SUF)\ - dvf4.$(SUF) dvf8.$(SUF)\ - fef4.$(SUF) fef8.$(SUF)\ - fif4.$(SUF) fif8.$(SUF)\ - cfi.$(SUF)\ - cif4.$(SUF) cif8.$(SUF)\ - mlf4.$(SUF) mlf8.$(SUF)\ - ngf4.$(SUF) ngf8.$(SUF)\ - sbf4.$(SUF) sbf8.$(SUF)\ - adf4.$(SUF) adf8.$(SUF)\ - zrf4.$(SUF) zrf8.$(SUF)\ - extend.$(SUF) compact.$(SUF)\ - add_ext.$(SUF) div_ext.$(SUF) mul_ext.$(SUF) nrm_ext.$(SUF)\ - sft_ext.$(SUF) sub_ext.$(SUF) zrf_ext.$(SUF)\ - adder.$(SUF) shifter.$(SUF) fptrp.$(SUF) -SLIST = cff4.s cff8.s\ - cfu.s\ - cmf4.s cmf8.s\ - cuf4.s cuf8.s\ - dvf4.s dvf8.s\ - fef4.s fef8.s\ - fif4.s fif8.s\ - cfi.s\ - cif4.s cif8.s\ - mlf4.s mlf8.s\ - ngf4.s ngf8.s\ - sbf4.s sbf8.s\ - adf4.s adf8.s\ - zrf4.s zrf8.s\ - extend.s compact.s\ - add_ext.s div_ext.s mul_ext.s nrm_ext.s\ - sft_ext.s sub_ext.s zrf_ext.s\ - adder.s shifter.s fptrp.s - -SRC = FP_bias.h FP_shift.h FP_trap.h FP_types.h adder.h get_put.h\ - cff4.c cff8.c\ - cfu.c\ - cmf4.c cmf8.c\ - cuf4.c cuf8.c\ - dvf4.c dvf8.c\ - fef4.c fef8.c\ - fif4.c fif8.c\ - cfi.c\ - cif4.c cif8.c\ - mlf4.c mlf8.c\ - ngf4.c ngf8.c\ - sbf4.c sbf8.c\ - adf4.c adf8.c\ - zrf4.c zrf8.c\ - extend.c compact.c\ - add_ext.c div_ext.c mul_ext.c nrm_ext.c\ - sft_ext.c sub_ext.c zrf_ext.c\ - adder.c shifter.c fptrp.e - -all: FP_$(MACH).a - -install: tail_fp - -tail_fp: FP_$(MACH).a - ../../install FP_$(MACH).a tail_fp - -clean: - rm -f $(LIST) FP_$(MACH).a - rm -f $(SLIST) - -opr: - make pr | opr - -pr: - @pr Makefile FP.script $(SRC) - -FP_$(MACH).a: $(LIST) - $(ASAR) rv $@ $? - -fptrp.$(SUF): $(CDIR)/fptrp.e - ack -m$(MACH) $(EMFLAGS) -c $(CDIR)/fptrp.e - -extend.$(SUF) compact.$(SUF): byte_order.h $(CDIR)/get_put.h - -cff4.$(SUF): $(CDIR)/cff4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cff4.c - ed - cff4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cff4.s - -cff8.$(SUF): $(CDIR)/cff8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cff8.c - ed - cff8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cff8.s - -cfu.$(SUF): $(CDIR)/cfu.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cfu.c - ed - cfu.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cfu.s - -cmf4.$(SUF): $(CDIR)/cmf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cmf4.c - ed - cmf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cmf4.s - -cmf8.$(SUF): $(CDIR)/cmf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cmf8.c - ed - cmf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cmf8.s - -cuf4.$(SUF): $(CDIR)/cuf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cuf4.c - ed - cuf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cuf4.s - -cuf8.$(SUF): $(CDIR)/cuf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cuf8.c - ed - cuf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cuf8.s - -dvf4.$(SUF): $(CDIR)/dvf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/dvf4.c - ed - dvf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) dvf4.s - -dvf8.$(SUF): $(CDIR)/dvf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/dvf8.c - ed - dvf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) dvf8.s - -fef4.$(SUF): $(CDIR)/fef4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/fef4.c - ed - fef4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) fef4.s - -fef8.$(SUF): $(CDIR)/fef8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/fef8.c - ed - fef8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) fef8.s - -fif4.$(SUF): $(CDIR)/fif4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/fif4.c - ed - fif4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) fif4.s - -fif8.$(SUF): $(CDIR)/fif8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/fif8.c - ed - fif8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) fif8.s - -cfi.$(SUF): $(CDIR)/cfi.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cfi.c - ed - cfi.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cfi.s - -cif4.$(SUF): $(CDIR)/cif4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cif4.c - ed - cif4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cif4.s - -cif8.$(SUF): $(CDIR)/cif8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/cif8.c - ed - cif8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) cif8.s - -mlf4.$(SUF): $(CDIR)/mlf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/mlf4.c - ed - mlf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) mlf4.s - -mlf8.$(SUF): $(CDIR)/mlf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/mlf8.c - ed - mlf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) mlf8.s - -ngf4.$(SUF): $(CDIR)/ngf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/ngf4.c - ed - ngf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) ngf4.s - -ngf8.$(SUF): $(CDIR)/ngf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/ngf8.c - ed - ngf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) ngf8.s - -sbf4.$(SUF): $(CDIR)/sbf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/sbf4.c - ed - sbf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) sbf4.s - -sbf8.$(SUF): $(CDIR)/sbf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/sbf8.c - ed - sbf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) sbf8.s - -adf4.$(SUF): $(CDIR)/adf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/adf4.c - ed - adf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) adf4.s - -adf8.$(SUF): $(CDIR)/adf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/adf8.c - ed - adf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) adf8.s - -zrf4.$(SUF): $(CDIR)/zrf4.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/zrf4.c - ed - zrf4.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) zrf4.s - -zrf8.$(SUF): $(CDIR)/zrf8.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/zrf8.c - ed - zrf8.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) zrf8.s - -extend.$(SUF): $(CDIR)/extend.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/extend.c - ed - extend.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) extend.s - -compact.$(SUF): $(CDIR)/compact.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/compact.c - ed - compact.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) compact.s - -add_ext.$(SUF): $(CDIR)/add_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/add_ext.c - ed - add_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) add_ext.s - -div_ext.$(SUF): $(CDIR)/div_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/div_ext.c - ed - div_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) div_ext.s - -mul_ext.$(SUF): $(CDIR)/mul_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/mul_ext.c - ed - mul_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) mul_ext.s - -nrm_ext.$(SUF): $(CDIR)/nrm_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/nrm_ext.c - ed - nrm_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) nrm_ext.s - -sft_ext.$(SUF): $(CDIR)/sft_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/sft_ext.c - ed - sft_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) sft_ext.s - -sub_ext.$(SUF): $(CDIR)/sub_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/sub_ext.c - ed - sub_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) sub_ext.s - -zrf_ext.$(SUF): $(CDIR)/zrf_ext.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/zrf_ext.c - ed - zrf_ext.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) zrf_ext.s - -adder.$(SUF): $(CDIR)/adder.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/adder.c - ed - adder.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) adder.s - -shifter.$(SUF): $(CDIR)/shifter.c - ack -c.s -m$(MACH) $(EMFLAGS) $(CDIR)/shifter.c - ed - shifter.s <$(CDIR)/FP.script - ack -c -m$(MACH) $(EMFLAGS) shifter.s diff --git a/mach/proto/fp/adder.h b/mach/proto/fp/adder.h deleted file mode 100644 index 63823af27..000000000 --- a/mach/proto/fp/adder.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. - See the copyright notice in the ACK home directory, in the file "Copyright". -*/ - -/* $Header$ */ - -/* - * include file for 32 & 64 bit addition - */ - -typedef struct { - unsigned long h_32; /* higher 32 bits of 64 */ - unsigned long l_32; /* lower 32 bits of 64 */ -} B64; diff --git a/mach/proto/fp/prt_dbl.c b/mach/proto/fp/prt_dbl.c deleted file mode 100644 index 4453e412c..000000000 --- a/mach/proto/fp/prt_dbl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. - See the copyright notice in the ACK home directory, in the file "Copyright". -*/ - -/* $Header$ */ - -# include "FP_types.h" - -prt_dbl(dbl,size) -DOUBLE *dbl; -int size; -{ -#ifdef PRT_DBL - unsigned long *l; - - fprintf(stderr,"PRT_DBL SIZE = %d ",size); - fprintf(stderr,"_s.p1.fract = 0x%08X ",dbl->_s.p1.fract); - if (size == 8) - fprintf(stderr,"_s.p2 = 0x%08X",dbl->_s.p2); - l = (unsigned long *) dbl; -#ifdef PRT_LONG - fprintf(stderr,"\nl[0] = 0x%08X ",*l++); - if (size == 8) - fprintf(stderr,"l[1] = 0x%08X",*l); -#endif PRT_LONG - putc('\r',stderr); - putc('\n',stderr); - fflush(stderr); -#endif -} - diff --git a/mach/proto/fp/prt_ext.c b/mach/proto/fp/prt_ext.c deleted file mode 100644 index 243c72704..000000000 --- a/mach/proto/fp/prt_ext.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. - See the copyright notice in the ACK home directory, in the file "Copyright". -*/ - -/* $Header$ */ - -/********************************************************/ -/* - PRINT EXTENDED FORMAT AND MESSAGE - DEBUG ROUTINE -*/ -/********************************************************/ - -#include "FP_types.h" - -prt_ext(m,e) -char *m; -EXTEND *e; -{ -#ifdef PRT_EXT - fprintf(stderr,"%s ",m); - fprintf(stderr,"%c",(e->sign) ? '-' : '+'); - fprintf(stderr,"m1:0x%08X m2:0x%08X ^ %03d 0x%x\n", - e->m1,e->m2,e->exp,e->exp); - fprintf(stderr,"hit any key\n\r"); - fflush(stderr); - getchar(); -#endif -} diff --git a/mach/proto/fp/x b/mach/proto/fp/x deleted file mode 100644 index e69de29bb..000000000 diff --git a/mach/proto/libg/Makefile b/mach/proto/libg/Makefile deleted file mode 100644 index d476d9bb7..000000000 --- a/mach/proto/libg/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -# $Header$ - -MACH=MACHINE -MACHFL=-c.$(SUF) -O -L -SUB = -PREF=pc -ASAR=arch -SRC=lang/pc/libpc -HOME = ../../.. -HEADSRC=$(HOME)/$(SRC)/head_$(PREF).e - -all: head tail - -head: head_$(PREF) - -tail: tail_$(PREF)$(SUB) - -headcp: head - ../../install head_$(PREF) - rm -f head_$(PREF) - -tailcp: tail - ../../install tail_$(PREF)$(SUB) - rm -f tail_$(PREF)$(SUB) - -cp: headcp tailcp - -head_$(PREF): $(HEADSRC) - cp $(HEADSRC) head_$(PREF).e - $(MACH) $(MACHFL) -I$(HOME)/h head_$(PREF).e - mv head_$(PREF).$(SUF) head_$(PREF) - -rm -f head_$(PREF).[ekm$(SUF)] - -tail_$(PREF)$(SUB): - @echo translation test - @$(MACH) $(MACHFL) $(HOME)/mach/proto/libg/barrier.c - @-rm -f barrier.[oeskm] barrier.so - @echo OK - -rm -f tail_$(PREF)$(SUB) - MACH="$(MACH)" MACHFL="$(MACHFL) -LIB" ASAR=$(ASAR) SRC=$(SRC) \ - march $(HOME)/$(SRC) tail_$(PREF)$(SUB) diff --git a/mach/proto/ncg/Makefile b/mach/proto/ncg/Makefile deleted file mode 100644 index f5e2bda61..000000000 --- a/mach/proto/ncg/Makefile +++ /dev/null @@ -1,197 +0,0 @@ -# $Header$ - -EMHOME=../../.. -#preprocessor flags for table -TABLEFLAGS= -#cgg options -CGGFLAGS= - -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/ncg -CGG=$(EMHOME)/lib/ncgg -CPP=$(EMHOME)/lib/cpp -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/label.c $(CDIR)/main.c \ - $(CDIR)/move.c $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c \ - $(CDIR)/salloc.c $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o label.o \ - main.o move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -label.o: $(CDIR)/label.c - $(CC) -c $(CFLAGS) $(CDIR)/label.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - $(EMHOME)/mach/install cg - -cmp: all - -$(EMHOME)/mach/compare cg - - -tables.c: table $(CGG) - $(CPP) $(TABLEFLAGS) table | $(CGG) $(CGGFLAGS) - -cmp tables.h tables.H || cp tables.H tables.h - -lint: $(CFILES) tables.c - lint $(LINTOPTS) $(PREFLAGS) -I$(CDIR) $(CFILES) tables.c -clean: - rm -f *.o tables.c tables.h debug.out cg tables.H - -distr: tables.c - rm -f tables1.c tables1.h - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - -codegen.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/label.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -label.o: $(CDIR)/label.h -label.o: $(CDIR)/param.h -label.o: tables.h -label.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -main.o: tables.h -move.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h $(EMHOME)/h/cgg_cg.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h $(EMHOME)/h/cgg_cg.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/proto/top/Makefile b/mach/proto/top/Makefile deleted file mode 100644 index 57908427f..000000000 --- a/mach/proto/top/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -EMHOME=../../.. -LIBS=$(EMHOME)/modules/lib/libstring.a -PREFLAGS=-I. -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -DNDEBUG -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -CDIR=$(EMHOME)/mach/proto/top -CFILES=$(CDIR)/top.c $(CDIR)/queue.c -OFILES=top.o queue.o - -all: gen.c - make top - -top: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LIBS) -o top - -top.o: $(CDIR)/top.c gen.c - $(CC) -c $(CFLAGS) $(CDIR)/top.c - -queue.o: $(CDIR)/queue.c - $(CC) -c $(CFLAGS) $(CDIR)/queue.c - -install: all - $(EMHOME)/mach/install top - -cmp: all - -$(EMHOME)/mach/compare top - -gen.c: table - $(EMHOME)/lib/topgen table - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) - -clean: - rm -f *.o gen.c gen.h top - -top.o: gen.h -top.o: $(CDIR)/top.h -top.o: $(CDIR)/queue.h -queue.o: $(CDIR)/queue.h diff --git a/mach/s2650/as/Makefile b/mach/s2650/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/s2650/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/sparc/ce/ce.src/C_exp.c b/mach/sparc/ce/ce.src/C_exp.c deleted file mode 100644 index e9c238892..000000000 --- a/mach/sparc/ce/ce.src/C_exp.c +++ /dev/null @@ -1,13 +0,0 @@ -#define CODE_EXPANDER -#include -#include "back.h" - -C_exp( s) -char *s; -{ - s = extnd_name( s); - set_global_visible(s); -#ifdef __solaris__ - fprint(codefile, "\t.type\t%s,#function\n", s); -#endif -} diff --git a/mach/sparc/libsys/fif.s b/mach/sparc/libsys/fif.s deleted file mode 100644 index cdc6791ee..000000000 --- a/mach/sparc/libsys/fif.s +++ /dev/null @@ -1,67 +0,0 @@ -.global fif8, Fd0, Fd1, Fd80000000, Fs80000000, Fs0 - -.align 8 -Fd0: -.double 0r0 -Fd1: -.double 0r1 -FxE15: -.word 0x43300000, 0x0 ! magic const: (a.b + x) - x == a.0 -Fd80000000: -.align 8 -.double 0r4294967296 -Fs80000000: -.single 0r2147483648 -Fs0: -.single 0r0 - -fif8: - ld [%l0], %f0 - ld [%l0+4], %f1 - ld [%l0+8], %f2 - ld [%l0+12], %f3 - fmuld %f0, %f2, %f0 - fmovs %f0, %f6 - fmovs %f1, %f7 - set Fd0, %o0 - ldd [%o0], %f8 - fcmpd %f0, %f8 - nop - fbuge,a 1f - mov %g0, %o1 - set 1, %o1 - fnegs %f0, %f0 -1: - set FxE15, %o0 - ldd [%o0], %f10 - fcmpd %f0, %f10 - nop - fbuge 2f - nop - faddd %f0, %f10, %f4 - fsubd %f4, %f10, %f4 - fsubd %f0, %f4, %f2 - set Fd1, %o0 - ldd [%o0], %f12 -4: fcmpd %f2, %f12 - nop - fbge,a 4b - fsubd %f2, %f12, %f2 -5: fcmpd %f2, %f8 - nop - fbl,a 5b - faddd %f2, %f12, %f2 - fsubd %f0, %f2, %f0 -2: - tst %o1 - bz 3f - nop - fnegs %f0, %f0 -3: - fsubd %f6, %f0, %f2 - st %f0, [%l0] - st %f1, [%l0+4] - st %f2, [%l0+8] - st %f3, [%l0+12] - retl - nop diff --git a/mach/sparc/libsys/msync.s b/mach/sparc/libsys/msync.s deleted file mode 100644 index 397f934f7..000000000 --- a/mach/sparc/libsys/msync.s +++ /dev/null @@ -1,3 +0,0 @@ -#include "SYS.h" - -SYS_call_3(msync) diff --git a/mach/sun2/cv/Makefile b/mach/sun2/cv/Makefile deleted file mode 100644 index dbb54a7c6..000000000 --- a/mach/sun2/cv/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -DMACH=1 -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - ../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/sun2/cv/cv.c b/mach/sun2/cv/cv.c deleted file mode 100644 index 5a5670d50..000000000 --- a/mach/sun2/cv/cv.c +++ /dev/null @@ -1,624 +0,0 @@ -/* $Id$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - */ - -/* - * Convert ACK a.out file to SUN3 object format. - */ - -#include -#include -#include - -long lseek(); -#if __STDC__ -#include -#else -char *calloc(), *malloc(); -#endif - -#define OMAGIC 0407 /* old-fashioned */ -#define NMAGIC 0410 /* text write protexted */ -#define ZMAGIC 0413 /* demand paging */ - -struct bhdr { - short machtype; - short magic; - long tsize; - long dsize; - long bsize; - long ssize; - long entry; - long rtsize; - long rdsize; -}; - -struct machrelo { - long address; - long relodata; -}; -#define setpcrel(X,f) (X |= (f<<7)) -#define setsymbolnum(X,n) (X = (X & 0377) | ((long)n << 8)) -#define setextern(X,f) (X |= (f << 4)) -#define setlength(X,l) (X = (X & ~0x60)|((long) l << 5)) - -struct sym { - long name; - char type; - char other; - short desc; - long value; -}; - -#define N_UNDF 0 -#define N_ABS 02 -#define N_TEXT 04 -#define N_DATA 06 -#define N_BSS 010 -#define N_EXT 01 -#define N_FN 0x1f - -/* - * Header and section table of new format object file. - */ -struct outhead outhead; -struct outsect outsect[S_MAX]; - -char *output_file; -int outputfile_created; -long magic; - -int rom_in_data; - -char *program ; - -char flag ; - -/* Output file definitions and such */ - -struct bhdr bh; - -#define ENTRY 0x02000 -#define TOT_HDRSIZE (sizeof(struct bhdr)) - - - -#define TEXTSG 0 -#define ROMSG 1 -#define DATASG 2 -#define BSSSG 3 -#define LSECT BSSSG+1 -#define NSECT LSECT+1 - -int output; - -int unresolved; -long textsize ; -long datasize ; -long bsssize; - -long align(a,b) - long a,b; -{ - a += b - 1; - return a - a % b; -} - -int -follows(pa, pb) - register struct outsect *pa, *pb; -{ - /* return 1 if pa follows pb */ - - return pa->os_base == align(pb->os_base+pb->os_size, pa->os_lign); -} - -main(argc, argv) - int argc; - char *argv[]; -{ - register int nsect; - - program= argv[0] ; - if ( argc>1 && argv[1][0]=='-' ) { - flag=argv[1][1] ; - if (flag == 'u') unresolved++; - argc-- ; argv++ ; - } - switch (argc) { - case 3: if ((output = creat(argv[2], 0644)) < 0 || - (close(output), output = open(argv[2],2)) < 0) - fatal("Can't write %s.\n", argv[2]); - output_file = argv[2]; - outputfile_created = 1; - if (! rd_open(argv[1])) - fatal("Can't read %s.\n", argv[1]); - break; - default:fatal("Usage: %s [-u] .\n", program); - } - rd_ohead(&outhead); - if (BADMAGIC(outhead)) - fatal("Not an ack object file.\n"); - if (outhead.oh_flags & HF_LINK) { - if (! unresolved) { - fprintf(stderr,"Warning: contains unresolved references.\n"); - } - unresolved++; - } - else if (outhead.oh_nrelo > 0 && !unresolved) - fprintf(stderr, "Warning: relocation information present.\n"); - if ( outhead.oh_nsect!=LSECT && outhead.oh_nsect!=NSECT ) - fatal("Input file must have %d sections, not %ld\n", - NSECT,outhead.oh_nsect) ; - rd_sect(outsect, outhead.oh_nsect); - /* A few checks */ - if ( outsect[BSSSG].os_flen != 0 ) - fatal("bss space contains initialized data\n") ; - if ( !unresolved && ! follows(&outsect[BSSSG], &outsect[DATASG])) - fatal("bss segment must follow data segment\n") ; - if ( outsect[ROMSG].os_lign == 0x20000 ) { - /* 410/413 file with ROMSG in data space */ - rom_in_data = 1; - magic= NMAGIC ; - textsize= outsect[TEXTSG].os_size ; - datasize= outsect[BSSSG].os_base - outsect[ROMSG].os_base ; - if (! follows(&outsect[DATASG], &outsect[ROMSG])) - fatal("data segment must follow rom\n") ; - outsect[ROMSG].os_size = outsect[DATASG].os_base - outsect[ROMSG].os_base; - outsect[DATASG].os_size = outsect[BSSSG].os_base - outsect[DATASG].os_base; - } else - if ( outsect[DATASG].os_lign == 0x20000 ) { - /* 410/413 file with ROMSG in instruction space */ - rom_in_data = 0; - magic= NMAGIC ; - textsize= (outsect[ROMSG].os_base - outsect[TEXTSG].os_base) + - outsect[ROMSG].os_size ; - if (! follows(&outsect[ROMSG],&outsect[TEXTSG])) - fatal("rom segment must follow text\n") ; - outsect[TEXTSG].os_size = outsect[ROMSG].os_base - outsect[TEXTSG].os_base; - outsect[DATASG].os_size = outsect[BSSSG].os_base - outsect[DATASG].os_base; - datasize= outsect[DATASG].os_size ; - } else { - /* Plain 407 file */ - rom_in_data = 0; - magic= OMAGIC ; - if (!unresolved) { - textsize= (outsect[DATASG].os_base - outsect[TEXTSG].os_base); - if (! follows(&outsect[ROMSG],&outsect[TEXTSG])) - fatal("rom segment must follow text\n") ; - if (! follows(&outsect[DATASG],&outsect[ROMSG])) - fatal("data segment must follow rom\n") ; - outsect[TEXTSG].os_size = outsect[ROMSG].os_base - outsect[TEXTSG].os_base; - outsect[ROMSG].os_size = outsect[DATASG].os_base - outsect[ROMSG].os_base; - outsect[DATASG].os_size = outsect[BSSSG].os_base - outsect[DATASG].os_base; - } - else { - textsize = outsect[TEXTSG].os_size+outsect[ROMSG].os_size; - } - datasize = outsect[DATASG].os_size; - } - if (outsect[TEXTSG].os_base == TOT_HDRSIZE+ENTRY) { - if (magic != NMAGIC) { - fatal("illegal alignments.\n"); - } - magic = ZMAGIC; - textsize = (textsize + TOT_HDRSIZE + (0x2000 - 1)) & ~(0x2000 - 1); - datasize = (datasize + (0x2000 - 1)) & ~(0x2000 - 1); - } - bsssize = outsect[BSSSG].os_size; - if ( outhead.oh_nsect==NSECT ) { - if (! follows(&outsect[LSECT],&outsect[BSSSG])) - fatal("end segment must follow bss\n") ; - if ( outsect[LSECT].os_size != 0 ) - fatal("end segment must be empty\n") ; - } - - if (magic != OMAGIC && unresolved) { - fatal("unresolved references with wrong magic number\n"); - } - - if ((magic == ZMAGIC && outsect[TEXTSG].os_base != TOT_HDRSIZE+ENTRY) || - (magic != ZMAGIC && !unresolved && outsect[TEXTSG].os_base != ENTRY)) { - fatal("Illegal entry point.\n"); - } - - bh.magic = magic; - bh.machtype = MACH; - bh.tsize = textsize; - bh.bsize = bsssize; - bh.dsize = datasize; - bh.rtsize = 0; - bh.rdsize = 0; - if (magic == ZMAGIC) bh.entry = TOT_HDRSIZE+ENTRY; - else if (!unresolved) bh.entry = ENTRY; - else bh.entry = 0; - - /* Action at last */ - lseek(output,(long) TOT_HDRSIZE,0); - emits(&outsect[TEXTSG]) ; - if (rom_in_data && magic == ZMAGIC) { - lseek(output,textsize,0); - } - emits(&outsect[ROMSG]) ; - if (!rom_in_data && magic == ZMAGIC) { - lseek(output,textsize,0); - } - emits(&outsect[DATASG]) ; - if (magic == ZMAGIC) { - lseek(output,textsize + datasize,0); - } - if (unresolved) emit_relo(); - emit_symtab(); - bh.ssize = outhead.oh_nname * sizeof(struct sym); - lseek(output,0L,0); - cvshort(&(bh.machtype)); - cvshort(&(bh.magic)); - cvlong(&(bh.tsize)); - cvlong(&(bh.dsize)); - cvlong(&(bh.bsize)); - cvlong(&(bh.ssize)); - cvlong(&(bh.entry)); - cvlong(&(bh.rtsize)); - cvlong(&(bh.rdsize)); - writef(&bh, 1, (long) TOT_HDRSIZE); - if ( outputfile_created && !unresolved ) chmod(argv[2],0755); - return 0; -} - -writef(addr,sz,cnt) - char *addr; - long cnt; -{ - cnt *= sz; - - while (cnt) { - int i = cnt >= 0x4000 ? 0x4000 : cnt; - - cnt -= i; - if (write(output, addr, i) < i) { - fatal("write error\n"); - } - addr += i; - } -} - -/* - * Transfer the emitted byted from one file to another. - */ -emits(section) struct outsect *section ; { - char *p; - long sz = section->os_flen; - - rd_outsect(section - outsect); - while (sz) { - unsigned int i = (sz >= 0x4000 ? 0x4000 : sz); - if (!(p = malloc(i))) { - fatal("No memory.\n"); - } - rd_emit(p, i); - if (write(output, p, i) < i) { - fatal("write error.\n"); - } - free(p); - sz -= i; - } - - sz = section->os_size - section->os_flen; - if (sz) { - if (!(p = calloc(0x4000, 1))) { - fatal("No memory.\n"); - } - while (sz) { - unsigned int i = (sz >= 0x4000 ? 0x4000 : sz); - if (write(output, p, i) < i) { - fatal("write error.\n"); - } - sz -= i; - } - free(p); - } -} - -struct outname *ACKnames; - -emit_relo() -{ - struct outrelo *ACKrelo; - struct machrelo *MACHtrelo,*MACHdrelo; - register struct outrelo *ap; - register struct machrelo *mtp, *mdp; - unsigned int cnt = outhead.oh_nrelo; - - ACKrelo = (struct outrelo *) calloc(cnt, sizeof(struct outrelo)); - MACHtrelo = (struct machrelo *) calloc(cnt, sizeof(struct machrelo)); - MACHdrelo = (struct machrelo *) calloc(cnt, sizeof(struct machrelo)); - ACKnames = (struct outname *) calloc(outhead.oh_nname, sizeof(struct outname)); - if (!(ap = ACKrelo) || !(mtp = MACHtrelo) || !(mdp = MACHdrelo) || - !ACKnames) { - fatal("No memory.\n"); - } - rd_relo(ACKrelo, cnt); - rd_name(ACKnames, outhead.oh_nname); - while (cnt-- != 0) { - register struct machrelo *mp; - - if (ap->or_sect - S_MIN <= ROMSG) mp = mtp++; - else mp = mdp++; - setlength(mp->relodata,(ap->or_type&RELSZ) >> 1); - setpcrel(mp->relodata,(ap->or_type&RELPC != 0)); - mp->address = ap->or_addr; - if (ap->or_sect == ROMSG+S_MIN) { - mp->address += outsect[TEXTSG].os_size; - } - if (ap->or_nami < outhead.oh_nname) { - if (ACKnames[ap->or_nami].on_type & S_EXT) { - setsymbolnum(mp->relodata, ap->or_nami); - setextern(mp->relodata,1); - } - else { - patch(ap, &ACKnames[ap->or_nami], mp); - } - } - else { - setsymbolnum(mp->relodata, N_ABS); - } - cvlong(&(mp->address)); - cvlong(&(mp->relodata)); - ap++; - } - bh.rtsize = (char *) mtp - (char *) MACHtrelo; - bh.rdsize = (char *) mdp - (char *) MACHdrelo; - writef(MACHtrelo, 1, bh.rtsize); - writef(MACHdrelo, 1, bh.rdsize); - free(ACKrelo); - free(MACHtrelo); - free(MACHdrelo); -} - -long -get(sz) -{ - char buf[10]; - long l = 0; - register char *p = buf; - - read(output,buf,sz); - while (sz--) { - l = (l << 8) | (*p++ & 0377); - } - return l; -} - -put(l,sz) - long l; -{ - char buf[10]; - register char *p = buf; - - *p++ = l >> 24; - *p++ = l >> 16; - *p++ = l >> 8; - *p++ = l; - p -= sz; - if (write(output, p, sz) < sz) { - fatal("write error.\n"); - } -} - -patch(ap, an, mp) - register struct outrelo *ap; - register struct outname *an; - register struct machrelo *mp; -{ - int whichsect = (an->on_type & S_TYP) - S_MIN; - long correction = 0; - long where = TOT_HDRSIZE+ap->or_addr; - long X; - long here; - int sz; - - if (!(an->on_type & S_SCT)) { - fprintf(stderr,"funny on_type %x\n", an->on_type); - } - switch(whichsect) { - case TEXTSG: - setsymbolnum(mp->relodata,N_TEXT); - return; - case DATASG: - correction = outsect[ROMSG].os_size + outsect[TEXTSG].os_size; - setsymbolnum(mp->relodata,N_DATA); - break; - case ROMSG: - correction = outsect[TEXTSG].os_size; - setsymbolnum(mp->relodata,N_TEXT); - break; - case BSSSG: - correction = outsect[ROMSG].os_size + outsect[TEXTSG].os_size+ - outsect[DATASG].os_size; - setsymbolnum(mp->relodata,N_BSS); - break; - default: - assert(0); - } - - switch(ap->or_sect - S_MIN) { - case DATASG: - where += outsect[ROMSG].os_size; - case ROMSG: - where += outsect[TEXTSG].os_size; - case TEXTSG: - break; - default: - assert(0); - } - here = lseek(output, 0L, 1); - lseek(output, where, 0); - sz = ap->or_type & RELSZ; - X = get(sz) + correction; - lseek(output, where, 0); - put(X,sz); - lseek(output, here, 0); -} - -cvlong(l) - long *l; -{ - long x = *l; - char *p = (char *) l; - - *p++ = x >> 24; - *p++ = x >> 16; - *p++ = x >> 8; - *p = x; -} - -cvshort(s) - short *s; -{ - short x = *s; - char *p = (char *) s; - - *p++ = x >> 8; - *p = x; -} - -int -is_rest_local(A, i) - register int i; - register struct outname *A; -{ - while (i--) { - if (A->on_type & S_EXT) return 0; - A++; - } - return 1; -} - -emit_symtab() -{ - register unsigned short i = outhead.oh_nname; - register struct outname *A; - struct sym *MACHnames; - register struct sym *M; - char *chars; - long offX = OFF_CHAR(outhead) - 4; - - if (!(A = ACKnames)) { - if (!(A = (struct outname *) - calloc(i, sizeof(struct outname)))) { - fatal("No memory.\n"); - } - rd_name(A, outhead.oh_nname); - } - if (!(M = (struct sym *) calloc(i, sizeof(struct sym)))) { - fatal("No memory.\n"); - } - MACHnames = M; - ACKnames = A; - for (; i; i--, A++) { - M->value = A->on_valu; - M->desc = A->on_desc; - if ((A->on_type & S_SCT) || - (A->on_type & S_ETC) == S_FIL) { - static int rest_local; - if (! unresolved || rest_local || (rest_local = is_rest_local(A, i))) { - outhead.oh_nname--; - continue; - } - } - if (A->on_type & S_STB) { - M->type = A->on_type >> 8; - } - else if (A->on_type & S_COM) { - M->type = N_UNDF | N_EXT; - } - else switch(A->on_type & S_TYP) { - case S_UND: - switch(A->on_type & S_ETC) { - default: - M->type = N_UNDF; - break; - case S_MOD: - M->type = N_FN; - break; - case S_LIN: - M->type = N_ABS; - break; - } - break; - case S_ABS: - M->type = N_ABS; - break; - case S_MIN + TEXTSG: - M->type = N_TEXT; - break; - case S_MIN + ROMSG: - if (unresolved) { - M->value += outsect[TEXTSG].os_size; - } - M->type = (rom_in_data ? N_DATA : N_TEXT); - break; - case S_MIN + DATASG: - if (unresolved) { - M->value += outsect[TEXTSG].os_size + - outsect[ROMSG].os_size; - } - M->type = N_DATA; - break; - case S_MIN + BSSSG: - if (unresolved) { - M->value += outsect[TEXTSG].os_size + - outsect[ROMSG].os_size + - outsect[DATASG].os_size; - } - M->type = N_BSS; - break; - case S_MIN + LSECT: - M->type = N_BSS; - break; - default: - fprintf(stderr,"warning: unknown s_type: %d\n", - A->on_type & S_TYP); - } - if (A->on_type & S_EXT) M->type |= N_EXT; - M->name = A->on_foff; - M++; - } - M = MACHnames; - for (i = outhead.oh_nname; i; i--, M++) { - if (M->name) { - M->name -= offX; - } - else M->name = outhead.oh_nchar + 3; /* pointer to nullbyte */ - cvlong(&(M->name)); - cvlong(&(M->value)); - cvshort(&(M->desc)); - } - writef(MACHnames, sizeof(struct sym), (long) outhead.oh_nname); - free(MACHnames); - free(ACKnames); - if ((unsigned) outhead.oh_nchar != outhead.oh_nchar || - !( chars = malloc((unsigned) outhead.oh_nchar))) { - fatal("No memory\n."); - } - put(outhead.oh_nchar+4,4); - rd_string(chars,outhead.oh_nchar); - writef(chars, 1, outhead.oh_nchar); - free(chars); -} - -/* VARARGS1 */ -fatal(s, a1, a2) - char *s; -{ - fprintf(stderr,"%s: ",program) ; - fprintf(stderr, s, a1, a2); - if (outputfile_created) - unlink(output_file); - exit(-1); -} - -rd_fatal() { fatal("read error.\n"); } diff --git a/mach/sun2/libsys/Makefile b/mach/sun2/libsys/Makefile deleted file mode 100644 index 9132faab8..000000000 --- a/mach/sun2/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=sun2 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/sun2/libsys/compmodule b/mach/sun2/libsys/compmodule deleted file mode 100755 index 0e6fe9278..000000000 --- a/mach/sun2/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if sun2 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/sun3/ce/Makefile b/mach/sun3/ce/Makefile deleted file mode 100644 index 9d1559ed5..000000000 --- a/mach/sun3/ce/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -EMHOME=../../.. -BACK=$(EMHOME)/lib/ceg/ce_back -CEG = $(EMHOME)/lib/ceg/util -AR = ar - -all: back.a - make -f $(CEG)/make_own - -install: back.a - make -f $(CEG)/make_own install - -cmp: back.a - -make -f $(CEG)/make_own cmp - -pr: - @pr Makefile EM_table mach.h mach.c as_table as.h as.c \ - Make.back do_close.c do_open.c end_back.c misc.c output.c relocation.c - -opr: - make pr | opr - -# total cleanup -clean: - make -f $(CEG)/make_own clean - rm -rf back back.a - -# only remove ce, ceg, and back directories -dclean: - make -f $(CEG)/make_own dclean - rm -rf back - -back.a: do_close.c do_open.c end_back.c misc.c output.c relocation.c - -mkdir back - cp $(BACK)/obj_back/*h back - cp Make.back back/Makefile - cd back; make ; cd .. - $(AR) r back.a back/*o; - -sh -c 'ranlib back.a' diff --git a/mach/sun3/cv/Makefile b/mach/sun3/cv/Makefile deleted file mode 100644 index 7dc412a93..000000000 --- a/mach/sun3/cv/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -DMACH=2 -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - ../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -Xcv: Xcv.o - $(CC) $(LDFLAGS) -o Xcv Xcv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/sun3/libce/Makefile b/mach/sun3/libce/Makefile deleted file mode 100644 index fa471e2f7..000000000 --- a/mach/sun3/libce/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# $Header$ - -EMHOME=../../.. - -EMOBJ = aar.o cii.o cmi.o cms.o cmu.o csa.o csb.o cuu.o dia.o exg.o fat.o \ - inn.o lar.o los.o mon.o nop.o sar.o set.o shp.o sts.o trp.o trpstr.o - -FOBJ = adf4.o adf8.o cff.o cfi.o cfu.o cif.o cmf4.o cmf8.o cuf.o dvf4.o \ - dvf8.o fef4.o fef8.o fif4.o fif8.o mlf4.o mlf8.o sbf4.o sbf8.o vars.o - -OBJ = $(EMOBJ) $(FOBJ) - -all: libext.a head_em.sun.o - -.s.o: - sun3 -c $*.s - -libext.a: $(OBJ) - for i in $(OBJ) ; do ../../../lib/sun3/cv -u $$i $$i.X ; mv $$i.X $$i ; done - ar rv libext.a $(OBJ) - ranlib libext.a - -head_em.sun.o: head_em.o - ../../../lib/sun3/cv -u head_em.o head_em.sun.o - -install: all - ../../install libext.a tail_ext - ../../install head_em.sun.o head_ext - -cmp: all - -../../compare libext.a tail_ext - -../../compare head_em.sun.o head_ext - -clean: - rm -f *.[oa] - -pr: - -opr: - -$(EMOBJ): $(EMHOME)/lib/m68020/tail_em - aal x $(EMHOME)/lib/m68020/tail_em $(EMOBJ) diff --git a/mach/sun3/libsys/Makefile b/mach/sun3/libsys/Makefile deleted file mode 100644 index 5861ef1dd..000000000 --- a/mach/sun3/libsys/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=m68020 -all: libmon_o.a head_em.o - -install: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/sun3/libsys/Xstat.c b/mach/sun3/libsys/Xstat.c deleted file mode 100644 index b4c688992..000000000 --- a/mach/sun3/libsys/Xstat.c +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include - -static Xcvt(); - -int -stat(path, buf) - char *path; - struct stat *buf; -{ - char Xbuf[100]; - int retval; - - retval = _stat(path, Xbuf); - Xcvt(Xbuf, (char *)buf); - return retval; -} - -int -lstat(path, buf) - char *path; - struct stat *buf; -{ - char Xbuf[100]; - int retval; - - retval = _lstat(path, Xbuf); - Xcvt(Xbuf, (char *)buf); - return retval; -} - -int -fstat(fd, buf) - int fd; - struct stat *buf; -{ - char Xbuf[100]; - int retval; - - retval = __fstat(fd, Xbuf); - Xcvt(Xbuf, (char *)buf); - return retval; -} - -static -Xcvt(buf, statbuf) - char *buf, *statbuf; -{ - register char *s, *t; - register int i; - - s = buf; t = statbuf; - *t++ = *s++; *t++ = *s++; - *t++ = 0; *t++ = 0; - for (i = 14; i; i--) *t++ = *s++; - *t++ = 0; *t++ = 0; - for (i = 44; i; i--) *t++ = *s++; -} diff --git a/mach/sun3/libsys/_Xstat.c b/mach/sun3/libsys/_Xstat.c deleted file mode 100644 index ac8ad0e88..000000000 --- a/mach/sun3/libsys/_Xstat.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -static Xcvt(); - -int -_fstat(fd, buf) - int fd; - struct stat *buf; -{ - char Xbuf[100]; - int retval; - - retval = __fstat(fd, Xbuf); - Xcvt(Xbuf, (char *)buf); - return retval; -} - -static -Xcvt(buf, statbuf) - char *buf, *statbuf; -{ - register char *s, *t; - register int i; - - s = buf; t = statbuf; - *t++ = *s++; *t++ = *s++; - *t++ = 0; *t++ = 0; - for (i = 14; i; i--) *t++ = *s++; - *t++ = 0; *t++ = 0; - for (i = 44; i; i--) *t++ = *s++; -} diff --git a/mach/sun3/libsys/compmodule b/mach/sun3/libsys/compmodule deleted file mode 100755 index 253624cce..000000000 --- a/mach/sun3/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if sun3 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/vax4/as/Makefile b/mach/vax4/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/vax4/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/vax4/ce/Makefile b/mach/vax4/ce/Makefile deleted file mode 100644 index badc8d8ac..000000000 --- a/mach/vax4/ce/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -EMHOME=../../.. -BACK=$(EMHOME)/lib/ceg/ce_back -CEG = $(EMHOME)/lib/ceg/util -AR = ar - -all: back.a - make -f $(CEG)/make_own - -install: back.a - make -f $(CEG)/make_own install - -cmp: back.a - -make -f $(CEG)/make_own cmp - -pr: - @pr Makefile EM_table mach.h mach.c as_table as.h as.c \ - Make.back do_close.c do_open.c end_back.c misc.c output.c relocation.c - -opr: - make pr | opr - -# total cleanup -clean: - make -f $(CEG)/make_own clean - rm -rf back back.a - -# only remove ce, ceg, and back directories -dclean: - make -f $(CEG)/make_own dclean - rm -rf back - -back.a: do_close.c do_open.c end_back.c output.c relocation.c - -mkdir back - cp $(BACK)/obj_back/*h back - cp Make.back back/Makefile - cd back; make ; cd .. - $(AR) r back.a back/*o; - -sh -c 'ranlib back.a' diff --git a/mach/vax4/cg/Makefile b/mach/vax4/cg/Makefile deleted file mode 100644 index 22f5f603c..000000000 --- a/mach/vax4/cg/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -# $Header$ - -EMHOME=../../.. -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-hbxac -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/cg -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \ - $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \ - $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\ - move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - ../../install cg - -cmp: all - -../../compare cg - -distr: tables.c - rm -f tables1.[ch] - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - - -tables.c: table - -mv tables.h tables.h.save - $(EMHOME)/lib/cpp -P table | $(EMHOME)/lib/cgg > debug.out - -if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi - -if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) -clean: - rm -f *.o tables.c tables.h debug.out cg tables.h.save - -codegen.o: $(CDIR)/assert.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -move.o: $(CDIR)/assert.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/vax4/cv/Makefile b/mach/vax4/cv/Makefile deleted file mode 100644 index 5cfa97a6a..000000000 --- a/mach/vax4/cv/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv - -all: $(TARGETS) - -install: all - ../../install cv - -cmp: all - ../../compare cv - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c - -opr: - make pr | opr diff --git a/mach/vax4/libbsd4_1a/Makefile b/mach/vax4/libbsd4_1a/Makefile deleted file mode 100644 index b38eda1aa..000000000 --- a/mach/vax4/libbsd4_1a/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# $Header$ -all: head_em.o libmon_o.a - -install: cp - -cp: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - - -head_em.o: head_em.s - vax4 -I../../../h -c head_em.s - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -clean: - rm -f *.o libmon_o.a - -opr: - make pr | opr - -pr: - @pr `pwd`/Makefile `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/vax4/libbsd4_1a/compmodule b/mach/vax4/libbsd4_1a/compmodule deleted file mode 100755 index 67777e8a6..000000000 --- a/mach/vax4/libbsd4_1a/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if vax4 -O -c -I../../../h -I. $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/vax4/libbsd4_2/Makefile b/mach/vax4/libbsd4_2/Makefile deleted file mode 100644 index ff816bd1a..000000000 --- a/mach/vax4/libbsd4_2/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# $Header$ -install: cp - -cp: all - ../../install head_em.o head_em - ../../install tail_mon - -cmp: all - -../../compare head_em.o head_em - -../../compare tail_mon - -all: head_em tail_mon - -head_em: head_em.s - vax4 -I../../../h -c head_em.s - -tail_mon: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . tail_mon - -clean: - rm -f *.o tail_mon -opr: - make pr | opr -pr: - @pr `pwd`/Makefile `pwd`/head_em.s - @pr -l33 `tail +1 LIST|sort` diff --git a/mach/vax4/libbsd4_2/compmodule b/mach/vax4/libbsd4_2/compmodule deleted file mode 100755 index 3b054dea9..000000000 --- a/mach/vax4/libbsd4_2/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if vax4 -O -c -L -I../../../h -I. $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/vax4/libem/Makefile b/mach/vax4/libem/Makefile deleted file mode 100644 index 7588a8ea6..000000000 --- a/mach/vax4/libem/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# $Header$ -MACH=vax4 -ASAR=aal -all: libem_o.a end.a - -install: all - ../../install libem_o.a tail_em - ../../install end.a end_em - -cmp: all - -../../compare libem_o.a tail_em - -../../compare end.a end_em - -end.a: em_end.s etext.s edata.s end.s - $(MACH) -I../../../h -c em_end.s - $(MACH) -I../../../h -c edata.s - $(MACH) -I../../../h -c etext.s - $(MACH) -I../../../h -c end.s - $(ASAR) cr end.a em_end.o etext.o edata.o end.o - -libem_o.a: libem_s.a - ASAR=$(ASAR) ; export ASAR ;\ - march . libem_o.a - -clean: - rm -f *.o libem_o.a end.a - -opr : - make pr | opr - -pr: - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/em_end.s `pwd`/edata.s `pwd`/etext.s `pwd`/end.s diff --git a/mach/vax4/libem/compmodule b/mach/vax4/libem/compmodule deleted file mode 100755 index 67777e8a6..000000000 --- a/mach/vax4/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if vax4 -O -c -I../../../h -I. $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/vax4/libem/edata.s b/mach/vax4/libem/edata.s deleted file mode 100644 index f53adc109..000000000 --- a/mach/vax4/libem/edata.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _edata -.sect .data - .align 4 - .sect .data -_edata: diff --git a/mach/vax4/libem/em_end.s b/mach/vax4/libem/em_end.s deleted file mode 100644 index a062368da..000000000 --- a/mach/vax4/libem/em_end.s +++ /dev/null @@ -1,22 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define endtext,enddata,endbss,__end -.sect .text - .align 4 -.sect .rom - .align 4 -.sect .data - .align 4 -.sect .bss - .align 4 -.sect .end ! only for declaration of _end, __end and endbss. - - .sect .text -endtext: - .sect .data -enddata: - .sect .end -__end: -endbss: diff --git a/mach/vax4/libem/end.s b/mach/vax4/libem/end.s deleted file mode 100644 index 93a1e6e00..000000000 --- a/mach/vax4/libem/end.s +++ /dev/null @@ -1,7 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _end -.sect .end ! only for declaration of _end, __end and endbss. -_end: diff --git a/mach/vax4/libem/etext.s b/mach/vax4/libem/etext.s deleted file mode 100644 index 8c7453cb4..000000000 --- a/mach/vax4/libem/etext.s +++ /dev/null @@ -1,9 +0,0 @@ -.sect .text -.sect .rom -.sect .data -.sect .bss -.define _etext -.sect .text - .align 4 - .sect .text -_etext: diff --git a/mach/vax4/libem/head_em.s b/mach/vax4/libem/head_em.s deleted file mode 100644 index 2124e04b0..000000000 --- a/mach/vax4/libem/head_em.s +++ /dev/null @@ -1,93 +0,0 @@ -#include "system.h" -#include "em_abs.h" -#ifdef BSD42 -#include "/usr/include/syscall.h" -#endif BSD42 - - # $Header$ - -.globl hol0 -.globl .reghp -.globl .trppc -.globl .trpim - - # run time startoff - .word 0 - bispsw $0100 # set FU(0100) - movl 4(sp),r0 - clrl -4(r0) - movl sp,r0 - movl (r0)+,r1 - movl r0,r2 -a1: - tstl (r0)+ - bneq a1 - cmpl r0,(r2) - blssu a2 - tstl -(r0) -a2: - pushl r0 - pushl r2 - pushl r1 - movl $m1,ap - chmk (ap)+ # catch floating point exception - calls $3,_m_a_i_n - movl $m2,ap - movl r0,6(ap) - chmk (ap)+ - halt - - .align 1 -sig8: - .word 0x0000 - pushl 8(ap) - movl (sp)+,ap - pushl tab [ap] - jsb .trp - movl $m1,ap - chmk (ap)+ - ret - - .data -#ifdef BSD42 -m1: - .word SYS_sigvec - .long 3 - .long 8 - .long m1a - .long 0 -m1a: - .long sig8 - .long 0 - .long 0 -#else BSD42 -m1: - .word 48 - .long 2 - .long 8 - .long sig8 -#endif BSD42 -m2: - .word 1 - .long 1 - .long 0 -.reghp: - .long _end -hol0: - .space 8 -.trppc: - .space 4 -.trpim: - .long 0 -tab: - .long 0 - .long EIOVFL - .long EIDIVZ - .long EFOVFL - .long EFDIVZ - .long EFUNFL - .long EILLINS - .long EARRAY - .long EFOVFL - .long EFDIVZ - .long EFUNFL diff --git a/mach/vax4/libem/system.h b/mach/vax4/libem/system.h deleted file mode 100644 index 56ac7facc..000000000 --- a/mach/vax4/libem/system.h +++ /dev/null @@ -1,4 +0,0 @@ -/* $Header$ */ -/*#define BSD42 */ -/*#define BSD41c */ -#define BSD41a diff --git a/mach/vax4/libem/vars.s b/mach/vax4/libem/vars.s deleted file mode 100644 index cafb17430..000000000 --- a/mach/vax4/libem/vars.s +++ /dev/null @@ -1,15 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.sect .data -.define hol0 -.define .reghp -.define .trppc -.define .trpim - -hol0: - .space 8 -.trppc: - .space 4 -.trpim: - .data4 0 -.reghp: - .data4 __end diff --git a/mach/vax4/libsysV_2/Makefile b/mach/vax4/libsysV_2/Makefile deleted file mode 100644 index b38eda1aa..000000000 --- a/mach/vax4/libsysV_2/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# $Header$ -all: head_em.o libmon_o.a - -install: cp - -cp: all - ../../install head_em.o head_em - ../../install libmon_o.a tail_mon - -cmp: all - -../../compare head_em.o head_em - -../../compare libmon_o.a tail_mon - - -head_em.o: head_em.s - vax4 -I../../../h -c head_em.s - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -clean: - rm -f *.o libmon_o.a - -opr: - make pr | opr - -pr: - @pr `pwd`/Makefile `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/vax4/libsysV_2/compmodule b/mach/vax4/libsysV_2/compmodule deleted file mode 100755 index 3b054dea9..000000000 --- a/mach/vax4/libsysV_2/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if vax4 -O -c -L -I../../../h -I. $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/vax4/top/Makefile b/mach/vax4/top/Makefile deleted file mode 100644 index 57908427f..000000000 --- a/mach/vax4/top/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -EMHOME=../../.. -LIBS=$(EMHOME)/modules/lib/libstring.a -PREFLAGS=-I. -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -DNDEBUG -LDFLAGS=$(PFLAGS) -LINTOPTS=-bx -CDIR=$(EMHOME)/mach/proto/top -CFILES=$(CDIR)/top.c $(CDIR)/queue.c -OFILES=top.o queue.o - -all: gen.c - make top - -top: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LIBS) -o top - -top.o: $(CDIR)/top.c gen.c - $(CC) -c $(CFLAGS) $(CDIR)/top.c - -queue.o: $(CDIR)/queue.c - $(CC) -c $(CFLAGS) $(CDIR)/queue.c - -install: all - $(EMHOME)/mach/install top - -cmp: all - -$(EMHOME)/mach/compare top - -gen.c: table - $(EMHOME)/lib/topgen table - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) - -clean: - rm -f *.o gen.c gen.h top - -top.o: gen.h -top.o: $(CDIR)/top.h -top.o: $(CDIR)/queue.h -queue.o: $(CDIR)/queue.h diff --git a/mach/xenix3/cv/Makefile b/mach/xenix3/cv/Makefile deleted file mode 100644 index 2d6afc8cc..000000000 --- a/mach/xenix3/cv/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -EMHOME = ../../.. -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -INCLUDE = $(EMHOME)/h -CFLAGS = -I. -I$(INCLUDE) -O -TARGETS = cv chstack - -all: $(TARGETS) - -install: all - ../../install cv - ../../install chstack - -cmp: all - -../../compare cv - -../../compare chstack - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) - -chstack: chstack.o - $(CC) $(LDFLAGS) -o chstack chstack.o - -clean: - rm -f $(TARGETS) *.o nohup.out Out - -pr: - @pr Makefile cv.c chstack.c - -opr: - make pr | opr diff --git a/mach/xenix3/libsys/Makefile b/mach/xenix3/libsys/Makefile deleted file mode 100644 index 8585991ab..000000000 --- a/mach/xenix3/libsys/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# $Header$ -MACH=xenix3 -all: libmon_o.a head_em.o - -install: all - ../../install libmon_o.a tail_mon - ../../install head_em.o head_em - -cmp: all - -../../compare libmon_o.a tail_mon - -../../compare head_em.o head_em - -libmon_o.a: libmon_s.a - ASAR=aal ; export ASAR ;\ - march . libmon_o.a - -head_em.o: head_em.s - $(MACH) -O -c head_em.s -clean: - rm -f *.o libmon_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libmon_s.a | pr -h `pwd`/libmon_s.a diff --git a/mach/xenix3/libsys/_pipe.s b/mach/xenix3/libsys/_pipe.s deleted file mode 100644 index e01d6c130..000000000 --- a/mach/xenix3/libsys/_pipe.s +++ /dev/null @@ -1,13 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __pipe -.sect .text -__pipe: - mov ax,42 - call syscal - mov dx,bx - jae 1f - mov (_errno),ax - mov ax,-1 - cwd -1: - ret diff --git a/mach/xenix3/libsys/_wait.s b/mach/xenix3/libsys/_wait.s deleted file mode 100644 index 274857b87..000000000 --- a/mach/xenix3/libsys/_wait.s +++ /dev/null @@ -1,13 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define __wait -.sect .text -__wait: - mov ax,7 - call syscal - mov dx,bx - jae 1f - mov (_errno),ax - mov ax,-1 - cwd -1: - ret diff --git a/mach/xenix3/libsys/compmodule b/mach/xenix3/libsys/compmodule deleted file mode 100755 index d963eafb4..000000000 --- a/mach/xenix3/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if xenix3 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/z80/as/Makefile b/mach/z80/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/z80/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/z80/cg/Makefile b/mach/z80/cg/Makefile deleted file mode 100644 index 22f5f603c..000000000 --- a/mach/z80/cg/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -# $Header$ - -EMHOME=../../.. -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-hbxac -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/cg -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \ - $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \ - $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\ - move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - ../../install cg - -cmp: all - -../../compare cg - -distr: tables.c - rm -f tables1.[ch] - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - - -tables.c: table - -mv tables.h tables.h.save - $(EMHOME)/lib/cpp -P table | $(EMHOME)/lib/cgg > debug.out - -if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi - -if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) -clean: - rm -f *.o tables.c tables.h debug.out cg tables.h.save - -codegen.o: $(CDIR)/assert.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -move.o: $(CDIR)/assert.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/z80/int/Makefile b/mach/z80/int/Makefile deleted file mode 100644 index 179c4658b..000000000 --- a/mach/z80/int/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -EMHOME=../../.. -SRC = em.s atof.s fpp.s mli4.s dvu4.s dvi4.s eb.s -OBJ = em.o atof.o fpp.o mli4.o dvu4.o dvi4.o eb.o -DLSRC = dl.c dlbin.c -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -LDFLAGS = - -CFLAGS = -O -I$(EMHOME)/h - -.s.o: - z80 -c -I$(EMHOME)/h $*.s - -all: int.hex dl dlbin cv - -install: all - @echo "nothing is installed" - -cmp: all - @echo "nothing is compared" - -clean: - rm -f *.o a.out dl dlbin *.hex cv - -pr: - @pr Makefile $(SRC) $(DLSRC) cv.c - -opr: - make pr | opr - -a.out: $(OBJ) - $(EMHOME)/lib/em_led -b0:0x100 -a0:2 -a1:2 -a2:2 -a3:2 $(OBJ) - -int.hex: a.out dlbin - ./dlbin a.out > int.hex - ./dosort int.hex - -dl: dl.o - $(CC) $(LDFLAGS) -o dl dl.o - -dlbin: dlbin.o - $(CC) $(LDFLAGS) -o dlbin dlbin.o $(LIBOBJ) - -cv: cv.o - $(CC) $(LDFLAGS) -o cv cv.o diff --git a/mach/z80/int/dlbin.c b/mach/z80/int/dlbin.c deleted file mode 100644 index bdf6fc7e0..000000000 --- a/mach/z80/int/dlbin.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Download Z80 load module into the RC702 - * - * Adapted (untested) to new ack.out format by - * Ceriel Jacobs, Vrije Universiteit, Amsterdam - */ -#include -#include -#include - -int disp = 0; - -char hex[] = "0123456789ABCDEF"; - -#define DATTYPE 0 -#define EOFTYPE 1 -#define SEGTYPE 2 -#define PCTYPE 3 - -#define MAXBYTE 32 - -char *progname; - -struct outhead ohead; -struct outsect sect[MAXSECT]; - -long pc; - -main(argc,argv) char **argv; { - register unsigned nd; - register char *s; - int first = 1; - int i; - - progname = argv[0]; - while (argc > 1 && argv[1][0] == '-') { - switch (argv[1][1]) { - case 'd': - /* displacement at load time */ - disp = atoi(&argv[1][2]); - break; - } - argc--; - argv++; - } - s = "a.out"; - if (argc == 2) - s = argv[1]; - else if (argc != 1) { - fprintf(stderr,"usage: %s [flags] [object file]\n",progname); - exit(-1); - } - if (! rd_open(s)) { - fprintf(stderr,"%s: can't open %s\n",progname,s); - exit(-1); - } - rd_ohead(&ohead); - if (ohead.oh_flags & HF_LINK) { - fprintf(stderr,"%s: %s contains unresolved references\n",progname,s); - exit(-1); - } - rd_sect(sect, ohead.oh_nsect); - for (i = 0; i < ohead.oh_nsect; i++) { - rd_outsect(i); - pc = sect[i].os_base; - if (first) { - first = 0; - putchar('L'); - putchar('S'); - } - segment(i); - while (sect[i].os_size) { - unsigned int sz = 8096, fl; - extern char *calloc(); - register char *buf; - char *pbuf; - - if (sz > sect[i].os_size) sz = sect[i].os_size; - sect[i].os_size -= sz; - pbuf = buf = calloc(sz, 1); - if (fl = sect[i].os_flen) { - if (fl > sz) fl = sz; - sect[i].os_flen -= fl; - - rd_emit(buf, (long) fl); - } - while (sz >= MAXBYTE) { - data(MAXBYTE, (int) pc, buf); - sz -= MAXBYTE; - buf += MAXBYTE; - pc += MAXBYTE; - } - if (sz > 0) { - data(sz, (int) pc, buf); - } - free(pbuf); - } - } - if (first == 0) eof(); - exit(0); -} - -segment(sg) { - - newline(2,0,SEGTYPE); - word(sg); - endline(); -} - -data(nd,pc,buf) - register char *buf; - int pc; -{ - register i; - - newline(nd, pc+disp, DATTYPE); - for (i = 0; i < nd; i++) { - byte(*buf++); - } - endline(); -} - -int check, bytecount; - -newline(n,pc,typ) { - - check = 0; - bytecount = n+5; - putchar('\n'); /* added instruction */ - putchar(':'); - byte(n); - word(pc); - byte(typ); -} - -endline() { - - byte(-check); - assert(bytecount == 0); -} - -word(w) { - - byte(w>>8); - byte(w); -} - -byte(b) { - - check += b; - bytecount--; - putchar(hex[(b>>4) & 017]); - putchar(hex[b & 017]); -} - -rd_fatal() -{ - fprintf(stderr, "%s: Read error\n", progname); - exit(-1); -} - -eof() { - - newline(0,0,EOFTYPE); - byte(0xFF); - putchar('\n'); -} diff --git a/mach/z80/int/int22 b/mach/z80/int/int22 deleted file mode 100644 index 62e8802e6..000000000 --- a/mach/z80/int/int22 +++ /dev/null @@ -1,31 +0,0 @@ -# $Revision$ -var w=2 -var p=2 -var s=2 -var l=4 -var f=4 -var d=4 -var M=int -var NAME=int22 -var LIB=lib/int22/tail_ -var RT=lib/int22/head_ -var SIZE_FLAG=-sm -var CPP_F=-DCPM=CPM -var INCLUDES=-I{EM}/include/_tail_cc -I{EM}/include/_tail_mon -name asld - from .k.m.a.g - to .out - outfile e.out - program {EM}/lib/em_ass - mapflag -l* LNAME={EM}/{LIB}* - mapflag -+* ASS_F={ASS_F?} -+* - mapflag --* ASS_F={ASS_F?} --* - mapflag -s* SIZE_FLAG=-s* - args {SIZE_FLAG} \ - ({RTS}:.b.c={EM}/{RT}cc) ({RTS}:.p={EM}/{RT}pc) -o > < \ - (.p:{TAIL}={EM}/{LIB}pc) \ - (.b:{TAIL}={EM}/{LIB}bc) \ - (.b.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) \ - (.b.c.p:{TAIL}={EM}/{LIB}mon) - linker -end diff --git a/mach/z80/libem/Makefile b/mach/z80/libem/Makefile deleted file mode 100644 index 3529a29ad..000000000 --- a/mach/z80/libem/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $Header$ -MACH=z80 -all: libem_o.a end.o - -install: all - ../../install end.o end_em - ../../install libem_o.a tail_em - - -cmp: all - -../../compare end.o end_em - -../../compare libem_o.a tail_em - -libem_o.a: libem_s.a - ASAR=aal ; export ASAR ;\ - march . libem_o.a - -end.o: end.s - $(MACH) -I../../../h -c end.s - -clean: - rm -f *.o libem_o.a - -opr : - make pr | opr - -pr: - @pr `pwd`/end.s - @arch pv libem_s.a | pr -h `pwd`/libem_s.a diff --git a/mach/z80/libem/compmodule b/mach/z80/libem/compmodule deleted file mode 100755 index ec9d18f34..000000000 --- a/mach/z80/libem/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if z80 -c $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/z80/libem/end.s b/mach/z80/libem/end.s deleted file mode 100644 index 6b9ce418e..000000000 --- a/mach/z80/libem/end.s +++ /dev/null @@ -1,17 +0,0 @@ -.sect .text; .sect .rom; .sect .data; .sect .bss -.define endtext,enddata,endbss -.define _end,_etext,_edata - - ! $Header$ - .sect .text -endtext: -_etext: - .align 2 - .sect .data -enddata: -_edata: - .align 2 -.sect .endsect -_end: -endbss: - .align 2 diff --git a/mach/z80/libem/pstrng.s b/mach/z80/libem/pstrng.s deleted file mode 100644 index d9ebc5587..000000000 --- a/mach/z80/libem/pstrng.s +++ /dev/null @@ -1,21 +0,0 @@ -.define pstrng -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - - -! print a string of characters to the console -! entry: DE points to string -! string terminator is 0x00 -! exit: DE points to string terminator -pstrng: push af -1: ld a,(de) - or a - jr z,2f - call putchar - inc de - jr 1b -2: pop af - ret diff --git a/mach/z80/libem/tail.s b/mach/z80/libem/tail.s deleted file mode 100644 index aead49970..000000000 --- a/mach/z80/libem/tail.s +++ /dev/null @@ -1,15 +0,0 @@ -.define endtext,enddata,endbss -.define _end,_etext,_edata - - .text -endtext: -_etext: - .align 2 - .data -enddata: -_edata: - .align 2 - .bss -_end: -endbss: - .align 2 diff --git a/mach/z80/libmon/Makefile b/mach/z80/libmon/Makefile deleted file mode 100644 index f7baeca8d..000000000 --- a/mach/z80/libmon/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -TAIL=libhermac_o.a -# Other possibilities are: tail.nascom and tail.cpm -MACH=z80 - -all: head_em.o libhermac_o.a libnascom_o.a libcpm_o.a - -install: head_em.o $(TAIL) - ../../install head_em.o head_em - ../../install $(TAIL) tail_sys - -cmp: head_em.o $(TAIL) - -../../compare head_em.o head_em - -../../compare $(TAIL) tail_sys - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -libcpm_o.a: libcpm_s.a - ASAR=aal ; export ASAR; march . libcpm_o.a - -libnascom_o.a: libnascom_s.a - ASAR=aal ; export ASAR; march . libnascom_o.a - -libhermac_o.a: libhermac_s.a - ASAR=aal ; export ASAR; march . libhermac_o.a - -libcpm_s.a: - @echo Warning: untested, this is an example - arch cr libcpm_s.a mon.cpm.s - echo libcpm_s.a > LIST - arch t libcpm_s.a >> LIST - -libnascom_s.a: - arch cr libnascom_s.a mon.s char.nas.s - echo libnascom_s.a > LIST - arch t libnascom_s.a >> LIST - -libhermac_s.a: - arch cr libhermac_s.a mon.s char.her.s - echo libhermac_s.a > LIST - arch t libhermac_s.a >> LIST - -clean: - rm -f *.o *_o.a out nohup.out Out - -opr: - make pr | opr -pr: - @pr `pwd`/Makefile `pwd`/head_em.s - @pr `pwd`/mon.s `pwd`/mon.cpm.s `pwd`/char.nas.s `pwd`/char.her.s diff --git a/mach/z80/libmon/compmodule b/mach/z80/libmon/compmodule deleted file mode 100755 index 97ebc5696..000000000 --- a/mach/z80/libmon/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if z80 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/z80/libmon/putchr.nas.s b/mach/z80/libmon/putchr.nas.s deleted file mode 100644 index e66a68910..000000000 --- a/mach/z80/libmon/putchr.nas.s +++ /dev/null @@ -1,33 +0,0 @@ -.define putchr -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text -! output routine in monitor -CRT = 0x013B -! output a charcter -! entry: ascii character in a -putchr: - push hl - push bc - ld hl,tab - ld b,5 -1: cp (hl) - jr z,fetch - inc hl - inc hl - djnz 1b -2: call CRT - pop bc - pop hl - ret -fetch: inc hl - ld a,(hl) - jr 2b -! conversion table for nascom characters -tab: .data1 0x0D,0x00 - .data1 0x1B,0x1E - .data1 0x08,0x1D - .data1 0x0A,0x1F - .data1 0x7F,0x00 diff --git a/mach/z80/libmon/putchr.s b/mach/z80/libmon/putchr.s deleted file mode 100644 index 898db469a..000000000 --- a/mach/z80/libmon/putchr.s +++ /dev/null @@ -1,26 +0,0 @@ -.define putchr -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -putchr: - push hl - push de - push bc - cp 0x0A - jr nz,1f - ld a,0x1F -1: - ld c,a -2: - in a,0xF1 - and 4 - jr z,2b - ld a,c - out 0xF0,a - pop bc - pop de - pop hl - ret diff --git a/mach/z80/libmon/subr.s b/mach/z80/libmon/subr.s deleted file mode 100644 index d82ca4f94..000000000 --- a/mach/z80/libmon/subr.s +++ /dev/null @@ -1,202 +0,0 @@ -.define _read,_write,_ioctl,_getpid,_open,_close,_exit,_errno -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text -_read: - ld (savebc),bc - push af - pop bc - ld (saveaf),bc ! save all registers in savereg - ld (savede),de - ld (savehl),hl - ld (saveix),ix - ex (sp),hl ! return address in hl - pop bc ! skip return address - pop bc ! get fd - ld a,b ! check fd = 0 - or c - jr nz,errrd - pop de ! get buffer - pop bc ! get count - ld ix,0 ! reset counter - push bc - push de - push ix - push hl ! return address - ex de,hl ! buffer to hl -1: ld a,b - or c - jr z,done ! done if count = 0 - call getchr - ld (hl),a - inc hl ! increment pointer - inc ix ! increment char counter - dec bc ! decrement count - cp 0xA - jr nz,1b ! done if char = CR -done: - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ret -errrd: - push bc - push hl ! return address - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ld ix,-1 - ret - -_write: - ld (savebc),bc - push af - pop bc - ld (saveaf),bc ! save all registers in savereg - ld (savede),de - ld (savehl),hl - ld (saveix),ix - ex (sp),hl ! return address in hl - pop de ! skip return address - pop de ! get fd - ld a,e ! check for fd = 1 - cp 1 - jr nz,errwr - ld a,d - or a - jr nz,errwr - pop de ! buffer in de - pop bc ! count in bc - push bc - push de - push de - push hl - ex de,hl ! buffer in hl - ld e,c - ld d,b ! count also in de -1: ld a,b - or c - jr z,exit - ld a,(hl) - call putchr - inc hl - dec bc - jr 1b -errwr: - push de - push hl - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ld ix,-1 ! error in fd - ret -exit: - push de ! count on stack - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - pop ix ! return count to caller - ret - -_ioctl: - ret -_getpid: - ret - -! open return a file descriptor (0,1,2) -! depending on 'mode' -! mode 2 doesn't work!! -_open: - ld (savebc),bc - push af - pop bc - ld (saveaf),bc ! save all registers in savereg - ld (savede),de - ld (savehl),hl - ld (saveix),ix - pop bc ! return address - pop de ! name pointer - pop ix ! mode (0 for read, - ! 1 for write) - push ix - push de - push bc - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ret ! return fd = 0 for read - ! fd = 1 for write - -_close: - ld ix,0 ! return succes - ret -_exit: -jp 0x38 -.sect .data -_errno: - .data2 0 -! output routine in monitor -CRT = 0x013B -! output a charcter -! entry: ascii character in a -.sect .text -!putchr: -! push hl -! push bc -! ld hl,tab -! ld b,5 -!1: cp (hl) -! jr z,fetch -! inc hl -! inc hl -! djnz 1b -!2: call CRT -! pop bc -! pop hl -! ret -!fetch: inc hl -! ld a,(hl) -! jr 2b -!! conversion table for nascom characters -!tab: .data1 0x0D,0x00 -! .data1 0x1B,0x1E -! .data1 0x08,0x1D -! .data1 0x0A,0x1F -! .data1 0x7F,0x00 - -KBD = 0x69 -! get character from keyboard -getchr: - call KBD - jr nc,getchr - cp 0x1F - jr z,CR - cp 0x1D - jr z,BS - ret -CR: ld a,0xA - ret -BS: ld a,0x8 - ret diff --git a/mach/z80/libsys/Makefile b/mach/z80/libsys/Makefile deleted file mode 100644 index f7baeca8d..000000000 --- a/mach/z80/libsys/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -TAIL=libhermac_o.a -# Other possibilities are: tail.nascom and tail.cpm -MACH=z80 - -all: head_em.o libhermac_o.a libnascom_o.a libcpm_o.a - -install: head_em.o $(TAIL) - ../../install head_em.o head_em - ../../install $(TAIL) tail_sys - -cmp: head_em.o $(TAIL) - -../../compare head_em.o head_em - -../../compare $(TAIL) tail_sys - -head_em.o: head_em.s - $(MACH) -I../../../h -c head_em.s - -libcpm_o.a: libcpm_s.a - ASAR=aal ; export ASAR; march . libcpm_o.a - -libnascom_o.a: libnascom_s.a - ASAR=aal ; export ASAR; march . libnascom_o.a - -libhermac_o.a: libhermac_s.a - ASAR=aal ; export ASAR; march . libhermac_o.a - -libcpm_s.a: - @echo Warning: untested, this is an example - arch cr libcpm_s.a mon.cpm.s - echo libcpm_s.a > LIST - arch t libcpm_s.a >> LIST - -libnascom_s.a: - arch cr libnascom_s.a mon.s char.nas.s - echo libnascom_s.a > LIST - arch t libnascom_s.a >> LIST - -libhermac_s.a: - arch cr libhermac_s.a mon.s char.her.s - echo libhermac_s.a > LIST - arch t libhermac_s.a >> LIST - -clean: - rm -f *.o *_o.a out nohup.out Out - -opr: - make pr | opr -pr: - @pr `pwd`/Makefile `pwd`/head_em.s - @pr `pwd`/mon.s `pwd`/mon.cpm.s `pwd`/char.nas.s `pwd`/char.her.s diff --git a/mach/z80/libsys/compmodule b/mach/z80/libsys/compmodule deleted file mode 100755 index 97ebc5696..000000000 --- a/mach/z80/libsys/compmodule +++ /dev/null @@ -1,4 +0,0 @@ -if z80 -c -L $1 1>&2 -then echo `basename $1 $2`.o -else exit 1 -fi diff --git a/mach/z80/libsys/putchr.nas.s b/mach/z80/libsys/putchr.nas.s deleted file mode 100644 index e66a68910..000000000 --- a/mach/z80/libsys/putchr.nas.s +++ /dev/null @@ -1,33 +0,0 @@ -.define putchr -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text -! output routine in monitor -CRT = 0x013B -! output a charcter -! entry: ascii character in a -putchr: - push hl - push bc - ld hl,tab - ld b,5 -1: cp (hl) - jr z,fetch - inc hl - inc hl - djnz 1b -2: call CRT - pop bc - pop hl - ret -fetch: inc hl - ld a,(hl) - jr 2b -! conversion table for nascom characters -tab: .data1 0x0D,0x00 - .data1 0x1B,0x1E - .data1 0x08,0x1D - .data1 0x0A,0x1F - .data1 0x7F,0x00 diff --git a/mach/z80/libsys/putchr.s b/mach/z80/libsys/putchr.s deleted file mode 100644 index 898db469a..000000000 --- a/mach/z80/libsys/putchr.s +++ /dev/null @@ -1,26 +0,0 @@ -.define putchr -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -putchr: - push hl - push de - push bc - cp 0x0A - jr nz,1f - ld a,0x1F -1: - ld c,a -2: - in a,0xF1 - and 4 - jr z,2b - ld a,c - out 0xF0,a - pop bc - pop de - pop hl - ret diff --git a/mach/z80/libsys/subr.s b/mach/z80/libsys/subr.s deleted file mode 100644 index d82ca4f94..000000000 --- a/mach/z80/libsys/subr.s +++ /dev/null @@ -1,202 +0,0 @@ -.define _read,_write,_ioctl,_getpid,_open,_close,_exit,_errno -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text -_read: - ld (savebc),bc - push af - pop bc - ld (saveaf),bc ! save all registers in savereg - ld (savede),de - ld (savehl),hl - ld (saveix),ix - ex (sp),hl ! return address in hl - pop bc ! skip return address - pop bc ! get fd - ld a,b ! check fd = 0 - or c - jr nz,errrd - pop de ! get buffer - pop bc ! get count - ld ix,0 ! reset counter - push bc - push de - push ix - push hl ! return address - ex de,hl ! buffer to hl -1: ld a,b - or c - jr z,done ! done if count = 0 - call getchr - ld (hl),a - inc hl ! increment pointer - inc ix ! increment char counter - dec bc ! decrement count - cp 0xA - jr nz,1b ! done if char = CR -done: - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ret -errrd: - push bc - push hl ! return address - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ld ix,-1 - ret - -_write: - ld (savebc),bc - push af - pop bc - ld (saveaf),bc ! save all registers in savereg - ld (savede),de - ld (savehl),hl - ld (saveix),ix - ex (sp),hl ! return address in hl - pop de ! skip return address - pop de ! get fd - ld a,e ! check for fd = 1 - cp 1 - jr nz,errwr - ld a,d - or a - jr nz,errwr - pop de ! buffer in de - pop bc ! count in bc - push bc - push de - push de - push hl - ex de,hl ! buffer in hl - ld e,c - ld d,b ! count also in de -1: ld a,b - or c - jr z,exit - ld a,(hl) - call putchr - inc hl - dec bc - jr 1b -errwr: - push de - push hl - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ld ix,-1 ! error in fd - ret -exit: - push de ! count on stack - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - pop ix ! return count to caller - ret - -_ioctl: - ret -_getpid: - ret - -! open return a file descriptor (0,1,2) -! depending on 'mode' -! mode 2 doesn't work!! -_open: - ld (savebc),bc - push af - pop bc - ld (saveaf),bc ! save all registers in savereg - ld (savede),de - ld (savehl),hl - ld (saveix),ix - pop bc ! return address - pop de ! name pointer - pop ix ! mode (0 for read, - ! 1 for write) - push ix - push de - push bc - ld bc,(saveaf) - push bc - pop af - ld bc,(savebc) - ld de,(savede) - ld hl,(savehl) - ld ix,(saveix) - ret ! return fd = 0 for read - ! fd = 1 for write - -_close: - ld ix,0 ! return succes - ret -_exit: -jp 0x38 -.sect .data -_errno: - .data2 0 -! output routine in monitor -CRT = 0x013B -! output a charcter -! entry: ascii character in a -.sect .text -!putchr: -! push hl -! push bc -! ld hl,tab -! ld b,5 -!1: cp (hl) -! jr z,fetch -! inc hl -! inc hl -! djnz 1b -!2: call CRT -! pop bc -! pop hl -! ret -!fetch: inc hl -! ld a,(hl) -! jr 2b -!! conversion table for nascom characters -!tab: .data1 0x0D,0x00 -! .data1 0x1B,0x1E -! .data1 0x08,0x1D -! .data1 0x0A,0x1F -! .data1 0x7F,0x00 - -KBD = 0x69 -! get character from keyboard -getchr: - call KBD - jr nc,getchr - cp 0x1F - jr z,CR - cp 0x1D - jr z,BS - ret -CR: ld a,0xA - ret -BS: ld a,0x8 - ret diff --git a/mach/z8000/as/Makefile b/mach/z8000/as/Makefile deleted file mode 100644 index 7455a4829..000000000 --- a/mach/z8000/as/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# $Header$ -EMHOME = ../../.. -h = $(EMHOME)/h -LIBOBJ = $(EMHOME)/modules/lib/libobject.a -CDIR = $(EMHOME)/mach/proto/as -CPP = $(EMHOME)/lib/cpp -DEF = - -FFLAG = -INCL = -I. -I$h $(DEF) -CFLAGS = $(FFLAG) -O $(INCL) -YFLAGS = -d -LDFLAGS = $(FFLAG) - -CSRC = $(CDIR)/comm3.c $(CDIR)/comm4.c $(CDIR)/comm5.c \ - $(CDIR)/comm6.c $(CDIR)/comm7.c $(CDIR)/comm8.c -COBJ = comm3.o comm4.o comm5.o \ - comm6.o comm7.o comm8.o -MACH = mach0.c mach1.c mach2.c mach3.c mach4.c mach5.c -COMM = $(CDIR)/comm0.h $(CDIR)/comm1.h $(CDIR)/comm2.y $(CSRC) - -all: as - -install:all - ../../install as - -cmp: - -../../compare as - -clean: - rm -f *.o as as.[cy] y.tab.h - -pr: $(MACH) - @pr -n $(MACH) - -opr: - make pr | opr -as: $(COBJ) as.o - $(CC) $(LDFLAGS) $(COBJ) as.o $(LIBOBJ) -o as - -as.y: $(CDIR)/comm2.y - $(CPP) -P -I. -I$h $(DEF) $(CDIR)/comm2.y >as.y - -@if test -f Expect ; then cat Expect ; else echo "expect 1 shift/reduce conflict"; fi - -lint: $(CSRC) as.c - lint $(INCL) $(CSRC) as.c - -y.tab.h: as.c -$(COBJ): y.tab.h -$(COBJ) as.y: $(CDIR)/comm0.h mach0.c -$(COBJ) as.y: $(CDIR)/comm1.h mach1.c -as.y: mach2.c -comm3.o: mach3.c -as.y: mach4.c -comm8.o: mach5.c -comm3.o: $(CDIR)/comm3.c - $(CC) -c $(CFLAGS) $(CDIR)/comm3.c -comm4.o: $(CDIR)/comm4.c - $(CC) -c $(CFLAGS) $(CDIR)/comm4.c -comm5.o: $(CDIR)/comm5.c - $(CC) -c $(CFLAGS) $(CDIR)/comm5.c -comm6.o: $(CDIR)/comm6.c - $(CC) -c $(CFLAGS) $(CDIR)/comm6.c -comm7.o: $(CDIR)/comm7.c - $(CC) -c $(CFLAGS) $(CDIR)/comm7.c -comm8.o: $(CDIR)/comm8.c - $(CC) -c $(CFLAGS) $(CDIR)/comm8.c diff --git a/mach/z8000/cg/Makefile b/mach/z8000/cg/Makefile deleted file mode 100644 index 22f5f603c..000000000 --- a/mach/z8000/cg/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -# $Header$ - -EMHOME=../../.. -PREFLAGS=-I$(EMHOME)/h -I. -I$(EMHOME)/mach -I$(EMHOME)/modules/h -DNDEBUG -PFLAGS= -CFLAGS=$(PREFLAGS) $(PFLAGS) -O -LDFLAGS=$(PFLAGS) -LINTOPTS=-hbxac -LIBS=$(EMHOME)/lib/em_data.a $(EMHOME)/modules/lib/libflt.a -CDIR=$(EMHOME)/mach/proto/cg -CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \ - $(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \ - $(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \ - $(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c -OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\ - move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o - -all: tables.c - make "EMHOME="$(EMHOME) cg - -cg: tables.o $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg - -tables.o: tables.c - $(CC) -c $(PREFLAGS) -I$(CDIR) tables.c - -codegen.o: $(CDIR)/codegen.c - $(CC) -c $(CFLAGS) $(CDIR)/codegen.c -compute.o: $(CDIR)/compute.c - $(CC) -c $(CFLAGS) $(CDIR)/compute.c -equiv.o: $(CDIR)/equiv.c - $(CC) -c $(CFLAGS) $(CDIR)/equiv.c -fillem.o: $(CDIR)/fillem.c - $(CC) -c $(CFLAGS) $(CDIR)/fillem.c -gencode.o: $(CDIR)/gencode.c - $(CC) -c $(CFLAGS) $(CDIR)/gencode.c -glosym.o: $(CDIR)/glosym.c - $(CC) -c $(CFLAGS) $(CDIR)/glosym.c -main.o: $(CDIR)/main.c - $(CC) -c $(CFLAGS) $(CDIR)/main.c -move.o: $(CDIR)/move.c - $(CC) -c $(CFLAGS) $(CDIR)/move.c -nextem.o: $(CDIR)/nextem.c - $(CC) -c $(CFLAGS) $(CDIR)/nextem.c -reg.o: $(CDIR)/reg.c - $(CC) -c $(CFLAGS) $(CDIR)/reg.c -regvar.o: $(CDIR)/regvar.c - $(CC) -c $(CFLAGS) $(CDIR)/regvar.c -salloc.o: $(CDIR)/salloc.c - $(CC) -c $(CFLAGS) $(CDIR)/salloc.c -state.o: $(CDIR)/state.c - $(CC) -c $(CFLAGS) $(CDIR)/state.c -subr.o: $(CDIR)/subr.c - $(CC) -c $(CFLAGS) $(CDIR)/subr.c -var.o: $(CDIR)/var.c - $(CC) -c $(CFLAGS) $(CDIR)/var.c - -install: all - ../../install cg - -cmp: all - -../../compare cg - -distr: tables.c - rm -f tables1.[ch] - cp tables.c tables1.c - cp tables.h tables1.h - chmod -w tables1.[ch] - - -tables.c: table - -mv tables.h tables.h.save - $(EMHOME)/lib/cpp -P table | $(EMHOME)/lib/cgg > debug.out - -if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi - -if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi - -lint: $(CFILES) - lint $(LINTOPTS) $(PREFLAGS) $(CFILES) -clean: - rm -f *.o tables.c tables.h debug.out cg tables.h.save - -codegen.o: $(CDIR)/assert.h -codegen.o: $(CDIR)/data.h -codegen.o: $(CDIR)/equiv.h -codegen.o: $(CDIR)/extern.h -codegen.o: $(CDIR)/param.h -codegen.o: $(CDIR)/result.h -codegen.o: $(CDIR)/state.h -codegen.o: tables.h -codegen.o: $(CDIR)/types.h -compute.o: $(CDIR)/assert.h -compute.o: $(CDIR)/data.h -compute.o: $(CDIR)/extern.h -compute.o: $(CDIR)/glosym.h -compute.o: $(CDIR)/param.h -compute.o: $(CDIR)/result.h -compute.o: tables.h -compute.o: $(CDIR)/types.h -equiv.o: $(CDIR)/assert.h -equiv.o: $(CDIR)/data.h -equiv.o: $(CDIR)/equiv.h -equiv.o: $(CDIR)/extern.h -equiv.o: $(CDIR)/param.h -equiv.o: $(CDIR)/result.h -equiv.o: tables.h -equiv.o: $(CDIR)/types.h -fillem.o: $(CDIR)/assert.h -fillem.o: $(CDIR)/data.h -fillem.o: $(CDIR)/extern.h -fillem.o: mach.c -fillem.o: mach.h -fillem.o: $(CDIR)/param.h -fillem.o: $(CDIR)/regvar.h -fillem.o: $(CDIR)/result.h -fillem.o: tables.h -fillem.o: $(CDIR)/types.h -gencode.o: $(CDIR)/assert.h -gencode.o: $(CDIR)/data.h -gencode.o: $(CDIR)/extern.h -gencode.o: $(CDIR)/param.h -gencode.o: $(CDIR)/result.h -gencode.o: tables.h -gencode.o: $(CDIR)/types.h -glosym.o: $(CDIR)/glosym.h -glosym.o: $(CDIR)/param.h -glosym.o: tables.h -glosym.o: $(CDIR)/types.h -main.o: $(CDIR)/param.h -move.o: $(CDIR)/assert.h -move.o: $(CDIR)/data.h -move.o: $(CDIR)/extern.h -move.o: $(CDIR)/param.h -move.o: $(CDIR)/result.h -move.o: tables.h -move.o: $(CDIR)/types.h -nextem.o: $(CDIR)/assert.h -nextem.o: $(CDIR)/data.h -nextem.o: $(CDIR)/extern.h -nextem.o: $(CDIR)/param.h -nextem.o: $(CDIR)/result.h -nextem.o: tables.h -nextem.o: $(CDIR)/types.h -reg.o: $(CDIR)/assert.h -reg.o: $(CDIR)/data.h -reg.o: $(CDIR)/extern.h -reg.o: $(CDIR)/param.h -reg.o: $(CDIR)/result.h -reg.o: tables.h -reg.o: $(CDIR)/types.h -regvar.o: $(CDIR)/assert.h -regvar.o: $(CDIR)/data.h -regvar.o: $(CDIR)/extern.h -regvar.o: $(CDIR)/param.h -regvar.o: $(CDIR)/regvar.h -regvar.o: $(CDIR)/result.h -regvar.o: tables.h -regvar.o: $(CDIR)/types.h -salloc.o: $(CDIR)/assert.h -salloc.o: $(CDIR)/data.h -salloc.o: $(CDIR)/extern.h -salloc.o: $(CDIR)/param.h -salloc.o: $(CDIR)/result.h -salloc.o: tables.h -salloc.o: $(CDIR)/types.h -state.o: $(CDIR)/assert.h -state.o: $(CDIR)/data.h -state.o: $(CDIR)/extern.h -state.o: $(CDIR)/param.h -state.o: $(CDIR)/result.h -state.o: $(CDIR)/state.h -state.o: tables.h -state.o: $(CDIR)/types.h -subr.o: $(CDIR)/assert.h -subr.o: $(CDIR)/data.h -subr.o: $(CDIR)/extern.h -subr.o: $(CDIR)/param.h -subr.o: $(CDIR)/result.h -subr.o: tables.h -subr.o: $(CDIR)/types.h -var.o: $(CDIR)/data.h -var.o: $(CDIR)/param.h -var.o: $(CDIR)/result.h -var.o: tables.h -var.o: $(CDIR)/types.h diff --git a/mach/z8000/libem/Makefile b/mach/z8000/libem/Makefile deleted file mode 100644 index b2c179d96..000000000 --- a/mach/z8000/libem/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -all: - -install: - ../../install head_em.s head_em - ../../install libem_s.a tail_em - ../../install end.s end_em - -cmp: - -../../compare head_em.s head_em - -../../compare libem_s.a tail_em - -../../compare end.s end_em - -clean: - -opr : - make pr | opr - -pr: - @pr `pwd`/head_em.s - @arch pv libem_s.a | pr -h `pwd`/libem_s.a - @pr `pwd`/end.s diff --git a/mach/z8000/libem/end.s b/mach/z8000/libem/end.s deleted file mode 100644 index 37e1cef2c..000000000 --- a/mach/z8000/libem/end.s +++ /dev/null @@ -1,16 +0,0 @@ -.define endtext,enddata,endbss,_etext,_edata,_end -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .end ! only for declaration of _end and endbss. - - .sect .text -endtext: -_etext: - .sect .data -enddata: -_edata: - .sect .end -_end: -endbss: diff --git a/mach/z8000/libem/head_em.s b/mach/z8000/libem/head_em.s deleted file mode 100644 index 5be73c5f0..000000000 --- a/mach/z8000/libem/head_em.s +++ /dev/null @@ -1,62 +0,0 @@ -.define EXIT, F_DUM -.define ERANGE, ESET, EHEAP, EILLINS, EODDZ, ECASE, EBADMON -.define hol0, trppc, trpim, reghp, argv, envp -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -EXIT = 0 -F_DUM = 0 - -ERANGE = 1 -ESET = 2 -EHEAP = 17 -EILLINS = 18 -EODDZ = 19 -ECASE = 20 -EBADMON = 25 - -.sect .text - !clear .sect .bss - ldk R2, $0 - ld R3, $endbss - ld R0, R3 - sub R0, $begbss - jr EQ, 1f - sra R0 - push *RR2, $0 - dec R0 - jr EQ, 1f - ldl RR4, RR2 - dec R5, $2 - lddr *RR4, *RR2, R0 -1: - ldb RL0, $10 ! echo newline - sc $4 - ldl RR14, $0 - push *RR14, envp - push *RR14, argv - push *RR14, $1 - calr __m_a_i_n - ldl RR14, $0xC00017FC - sc $0 - -.sect .bss -begbss: -.sect .data -hol0: - .data2 0,0 ! line no - .data2 0,0 ! file -trppc: - .data2 0 -trpim: - .data2 0 -argv: -envp: - .data2 1f - .data2 0 -1: .asciz "program" -reghp: - .data2 endbss diff --git a/mach/z8000/libem/mon.s b/mach/z8000/libem/mon.s deleted file mode 100644 index 407a9c576..000000000 --- a/mach/z8000/libem/mon.s +++ /dev/null @@ -1,88 +0,0 @@ -.define mon -.sect .text -.sect .rom -.sect .data -.sect .bss -.sect .text - -mon: - popl saveret, *RR14 - pop R0, *RR14 ! iocode - cp R0, $1 ! exit - jr NE, read - inc R15, $2 - sc $EXIT -read: cp R0, $3 ! read - jr NE, write - pop R0, *RR14 ! dummy; all input from stdin - pop R1, *RR14 ! ptr to buffer - pop R2, *RR14 ! nr of bytes to be read - ld R3, R1 - cp R2, $0 - jr EQ, 6f -1: sc $2 ! read character into RL0 - cpb RL0, $004 ! \^D - jr EQ, 6f - cpb RL0, $015 ! \cr - jr NE, 2f - ldb RL0, $012 -2: sc $4 ! echo - cpb RL0, $010 ! \^H - jr NE, 3f - cp R1, R3 - jr EQ, 5f - dec R1 - jr 5f -3: cpb RL0, $0100 ! \@ - jr NE, 4f - ld R1, R3 - ldb RL0, $012 - sc $4 - jr 5f -4: ldb 0(R1), RL0 - inc R1 - cpb RL0, $012 ! \nl - jr EQ, 6f -5: djnz R2, 1b -6: sub R1, R3 ! nr of bytes read - push *RR14, R1 - push *RR14, $0 - jr retu -write: cp R0, $4 ! write - jr NE, open - pop R0, *RR14 ! dummy; all output to stdout - pop R1, *RR14 ! ptr to buffer - pop R2, *RR14 ! nr of bytes to be written - ld R3, R2 - cp R2, $0 - jr EQ, 8f -9: ld R0, $5000 ! counter to delay printing a little -7: djnz R0, 7b - ldb RL0, 0(R1) - sc $4 - inc R1 - djnz R2, 9b -8: sub R3, R2 ! nr of bytes written - push *RR14, R3 - push *RR14, $0 - jr retu -open: cp R0, $5 ! open - jr close - jr NE, close - ld *RR14, $0 - ld 2(R15), $0 - jr retu -close: cp R0, $6 ! close - jr NE, ioctl - ld *RR14, $0 - jr retu -ioctl: cp R0, $54 ! ioctl - jr NE, err - inc R15, $4 - ld *RR14, $0 -retu: ldl RR2, saveret - jp *RR2 -err: push *RR14, saveret - push *RR14, $EBADMON - calr trp - ret diff --git a/man/6500_as.1 b/man/6500_as.1 deleted file mode 100644 index 1c8b43fb2..000000000 --- a/man/6500_as.1 +++ /dev/null @@ -1,66 +0,0 @@ -.\" $Header$ -.TH 6500_AS 1ACK -.SH NAME -6500_as \- assembler for Mostek 6500 -.SH SYNOPSIS -~em/lib/6500/as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). It is an assembler-loader. -.SH "SECTIONS and TYPES" -An additional section, the \fIzeropage\fP, can be started by the -\&\fI.sect .zero\fP pseudo-instruction. -Some adressing-modes require an address between 0 and 255. -Such an address must be defined with the means of the \fI.sect .zero\fP -pseudo-instruction. -A plain number between 0 and 255 is not allowed. -The assembler will complain that it must be a zero page expression. -.IP example -\&.sect .zero -.br -answer: .space 1 -.br -\&.text -.br -and (answer, x) -.SH SYNTAX -.IP expressions -An two-byte expression followed by the pseudo-operator \fI.h\fP (\fI.l\fP) -has the value of the higher (lower) byte of the expression. -\&\fI.h\fP and \fI.l\fP bind stronger than all other operators. -E.g. -1.h parses as -[1.h] which has value 0. -You have to write [-1].h to get 0xFF. -.IP "addressing modes" -.nf -.ta 16n 24n 32n 40n 48n -syntax meaning (name) - -#expr 8-bit value (immediate) - -expr address (direct) - -expr, x expr + contents of x - or or -expr, y expr + contents of y - yields address (indexed) - -(expr) address of address (only with JMP) (indirect) -.fi - -In the next two addressing modes \fIexpr\fP has to be -a zeropage expression. - -.nf -(expr, x) expr + contents of x - yields address (pre-indexed indirect) - -(expr), y contents of expr + contents of y - yields address (post-indexed indirect) -.fi -.IP instructions -There are two mnemonics that do not map onto one machine-instruction: -\fIadd\fP and \fIsub\fP. \fIAdd mode\fP maps onto \fIclc; adc mode\fP. -\fISub mode\fP maps onto \fIsec; sbc mode\fP. -.SH "SEE ALSO" -uni_ass(6), -ack(1) diff --git a/man/6800_as.1 b/man/6800_as.1 deleted file mode 100644 index 08791a50e..000000000 --- a/man/6800_as.1 +++ /dev/null @@ -1,55 +0,0 @@ -.\" $Header$ -.TH 6800_AS 1 -.ad -.SH NAME -6800_as \- assembler for Motorola 6800 -.SH SYNOPSIS -/usr/em/lib/6800_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP registers -The 6800 has two accumulator registers, A and B. An instruction that refers -to accumulator A, has an "a" as last character. In the same way a "b" means -that the instruction uses B as accumulator. -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning (name) - -#expr with cpx, ldx, lds a 2-byte value, - otherwise a 1-byte value (immediate) - -expr 2-byte address. Allowed in the register - memory group. (extended) -expr 1-byte address if appropriate, 2-byte - in other cases. (auto-direct/extended) -,x indexed with zero offset. (indexed) -expr,x indexed with 16 bit offset. (indexed-2) -expr,x indexed with the shortest possible off- - set. (auto indexed) -bit,expr bit number and direct address. - (bit set/clear) -bit,expr,tag bit number, direct address and branch - tag. Automatically changed to reversed - condition branch and jump if appropri- - ate. (bit test and branch) -tag branch tag. Converted to reversed con- - dition branch and jump if appropriate. - (branch) -.fi -.IP "PSEUDO INSTRUCTIONS" - - .dram use the zero page ram/io segment. - .dprom use the zero page (ep)rom segment. - .cmos assemble cmos version instructions. -.SH "SEE ALSO" -uni_ass(6), -ack(1), -.br -M6805 HMOS, M146805 CMOS family, Motorola, -Prentice-Hall, Inc., 1983, (ISBN 0-13-541375-3). -.SH EXAMPLE -An example of Motorola 6805 assembly code. -.sp 2 -.nf -.ta 8n 16n 32n 40n 48n 56n 64n - .dram - one: .space 1 ! a-port - .dprom - c1: .byte 1 - .text - start: ldx #c1 ! load address of c1 - txa - sta one - add c1 ! add one - brset 1,one,whoop ! jif bit one of aport - bset 1,one ! set it now - .data - .ascii "unused string" - .text - whoop: nop - .org 0xff8 - .word start ! set vector address - .text - nop ! resume code -.fi -.SH AUTHOR -Written by Gijs Mos. -Not a member of the ACK group. -.SH BUGS -The assembler has not been well tested. diff --git a/man/6809_as.1 b/man/6809_as.1 deleted file mode 100644 index 10e38c1a2..000000000 --- a/man/6809_as.1 +++ /dev/null @@ -1,147 +0,0 @@ -.\" $Header$ -.TH 6809_AS 1 -.ad -.SH NAME -6809_as \- assembler for 6809 -.SH SYNOPSIS -/usr/em/lib/6809_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP registers -The 6809 contains four 8-bit registers registers: -two accumulators (a and b), -a direct page register (dp), -and a condition code register (cc), -and five 16-bit registers: -two index registers (x and y), -a user an a hardware stack pointer (u resp. s), -and a program counter (pc). -The index registers and the stack pointers are indexable. -Accumulators a and b can be concatenated to form -the double accumulator d, -of which a is the high and b is the low byte. -An instruction that refers to accumulator a -has an "a" as last character. -In the same way a "b" means that the instruction -uses b as accumulator. -.IP "pseudo instructions" -The 6809 assembler recognizes one additional instruction -that is not translated into a machine instruction: setdp. -It expects an expression as argument. -This is used for efficient address encoding of some addressing -mode (see below). -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning (name) - -reg The operand of the instruction is in \fIreg\fP. - -reglist \fIreglist\fP is a either list of registers, seperated - by ','s, or the word "all". It encodes in a register - save mask, where "all" means all registers, that can - be used by the push-pull instructions pshs, pshu, - puls, and pulu. - -expr The two-byte value of \fIexpr\fP is the exact memory - address. Not that this mode always requires one - byte more than "expr". - (relative for branch-instructions) - -#expr The value of \fIexpr\fP is one- or two-byte immediate - data. (immediate) - -(expr) The value of \fIexpr\fP is a pointer to the address - of the operand. (indirect) - -expr, reg The value of \fIexpr\fP added to the contents of \fIreg\fP - (which must be a 16-bit register) yields the - effective address of the operand. - (constant-offset indexed) - -, ireg The contents of \fIireg\fP (which must be indexable) - yields the effective address of the operand. - (constant-offset indexed) - -(expr, reg) The value of \fIexpr\fP added to the contents of \fIreg\fP - (which must be a 16-bit register) yields a pointer - to the effective address of the operand. - (constant-offset indexed indirect) - -(, ireg) The contents of \fIireg\fP (which must be indexable) - yields a pointer to the effective address of the - operand. (constant-offset indexed indirect) - -ac, ireg The contents of \fIac\fP (which must be an accumulator) - added to the contents of \fIireg\fP (which must be - indexable) yields the effective address of the - operand. (accumulator indexed) - -(ac, ireg) The contents of \fIac\fP (which must be an accumulator) - added to the contents of \fIireg\fP (which must be - indexable) yields a pointer to the effective address - of the operand. (accumulator indexed indirect) - -,ireg+ -,ireg++ The contents of \fIireg\fP (which must be indexable) is - used as effective address of the operand. After that - it is incremented by 1 (+) or 2 (++). - (auto-increment) - -(,ireg++) The contents of \fIireg\fP (which must be indexable) is - used as a pointer to the effective address of the - operand. After that it is incremented by 2. - (auto-increment indirect) - -,-ireg -,--ireg \fIireg\fP (which must be indexable) is decremented - by 1 (-) or 2 (--). After that, its contents is used - as effective address of the operand. - (auto-decrement) - -(,--ireg) \fIireg\fP (which must be indexable) is decremented by 2. - After that, its contents is used as a pointer to the - effective address of the operand. - (auto-decrement indirect) - -.fi -.SH "SEE ALSO" -uni_ass(6), -ack(1), -.br -MC6809 preliminary programming manual, Motorola Inc., First Edition, 1979 -.SH EXAMPLE -An example of 6809 assembly code. -.nf -.ta 8n 16n 24n 32n 40n 48n - contby = 80 - - compgo: lda #contby - ldx #table - 2 !start of table - - clrb - co1: addb #2 - lsra - bcc co1 - jmp (b, x) !accumulator offset indirect -.fi diff --git a/man/8080_as.1 b/man/8080_as.1 deleted file mode 100644 index 4a1563620..000000000 --- a/man/8080_as.1 +++ /dev/null @@ -1,36 +0,0 @@ -.\" $Header$ -.TH 8080_AS 1 -.ad -.SH NAME -8080_as \- assembler for Intel 8080 and 8085 -.SH SYNOPSIS -/usr/em/lib/8080_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP registers -The 8080 has seven one-byte registers: a, b, c, d, e, h, l; -and two two-byte registers: sp and psw, respectively the stack pointer -and the processor status word. -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning - -expr one- or two-byte address or immediate - data, depending on the instruction. - -a,b,c,d,e,h,l -sp,psw (lower byte) of register - -b,d,h register-pair b-c, d-e, or h-l - -m register-pair h-l is address of - (one or two byte) operand -.fi -.SH "SEE ALSO" -uni_ass(1), -ack(1), -.br -System 80/20-4 microcomputer hardware reference manual, 1978 Intel corporation diff --git a/man/Makefile b/man/Makefile deleted file mode 100644 index f8cce12e0..000000000 --- a/man/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# $Header$ - -NROFF=nroff -MANDIR=/usr/man -SUF=opr - -all: - for i in *.[1-8] ; do \ - $(NROFF) -man head $$i > $$i.$(SUF) ; \ - done - -install: - for i in *.[1-8] ; do \ - num=`expr $$i : '.*\.\([1-8]\)'` ; \ - if test -f $(MANDIR)/man$$num/$$i ; \ - then cat head $$i > $(MANDIR)/man$$num/em_$$i ; \ - else cat head $$i > $(MANDIR)/man$$num/$$i ; \ - fi ; \ - done - -opr: - make pr | opr - -pr: - @make all >make.pr.out 2>&1 & - @cat *.opr - -clean: - -rm -f *.opr *.out - -rm -f *.$(SUF) diff --git a/man/a.out.5 b/man/a.out.5 deleted file mode 100644 index 25cc6b5b2..000000000 --- a/man/a.out.5 +++ /dev/null @@ -1,46 +0,0 @@ -.\" $Header$ -.TH A.OUT 5 -.SH NAME -a.out \- universal assembler load format -.SH DESCRIPTION -The load files produced by the universal assemblers look very -much alike. -These load files consist of sequences of variable length -records, each describing a part of the initialized memory. -Bss type memory is left uninitialized by the universal assembler -and has to be initialized at run-time. -The EM header em_head will perform this task on most systems. -Each record consists of a \fIcount\fP, an \fIaddress\fP and -\fIcount\fP bytes. -The first byte should be placed at \fIaddress\fP, the second at -\fIaddress+1\fP, etc. - -.nf -struct loadf { - unsigned short l_addr[2] ; /* address */ - short l_cnt ; /* count */ - unsigned char data[] ; /* data */ -} ; -.fi - -This representation is machine dependent in two ways. -First, the byte order in the first three fields is the byte order -of the machine the universal assembler is running. -Second, the format of the address differs from machine to machine. -.br -For example, for the Intel 8086 the first entry contains a -16-bit offset and the second entry a segment number. -The segment number has to be multiplied by 16 and added to -the addres to obtain the address of the first byte to be -initialized. -.br -The PDP 11 version stores the address in l_addr[0] and the type -of the initialized memory in l_addr[1]. -Types 1 and 3 are absolute, 4 is text, 5 is data and 6 BSS. -.br -For all other currently available machines the -array of shorts is 'replaced' by a long. -This long contains the 32-bit address. -.SH "SEE ALSO" -uni_ass(VI) -.SH BUGS diff --git a/man/arch.1 b/man/arch.1 deleted file mode 100644 index 4d675b626..000000000 --- a/man/arch.1 +++ /dev/null @@ -1,135 +0,0 @@ -.\" $Header$ -.TH ARCH 1 -.SH NAME -arch \- archive and library maintainer -.SH SYNOPSIS -.B arch -key [ posname ] afile name ... -.SH DESCRIPTION -.I Arch -maintains groups of files -combined into a single archive file. -Its main use -is to create and update library files as used by a linker. -It can be used, though, for any similar purpose. -The Amsterdam compiler kit provides its own archiver with a -fixed, machine-independent format, much like the UNIX-V7 -archive format. -EM programs using libraries assume archives in EM format. -.PP -.I Key -is one character from the set -.B drqtpmx, -optionally concatenated with -one or more of -.B vuaibcl. -.I Afile -is the archive file. -The -.I names -are constituent files in the archive file. -The meanings of the -.I key -characters are: -.TP -.B d -Delete the named files from the archive file. -.TP -.B r -Replace the named files in the archive file. -If the optional character -.B u -is used with -.B r, -then only those files with -modified dates later than -the archive files are replaced. -If an optional positioning character from the set -.B abi -is used, then the -.I posname -argument must be present -and specifies that new files are to be placed -after -.RB ( a ) -or before -.RB ( b -or -.BR i ) -.IR posname . -Otherwise -new files are placed at the end. -.TP -.B q -Quickly append the named files to the end of the archive file. -Optional positioning characters are invalid. -The command does not check whether the added members -are already in the archive. -Useful only to avoid quadratic behavior when creating a large -archive piece-by-piece. -.TP -.B t -Print a table of contents of the archive file. -If no names are given, all files in the archive are tabled. -If names are given, only those files are tabled. -.TP -.B p -Print the named files in the archive. -.TP -.B m -Move the named files to the end of the archive. -If a positioning character is present, -then the -.I posname -argument must be present and, -as in -.B r, -specifies where the files are to be moved. -.TP -.B x -Extract the named files. -If no names are given, all files in the archive are -extracted. -In neither case does -.B x -alter the archive file. -.TP -.B v -Verbose. -Under the verbose option, -.I arch -gives a file-by-file -description of the making of a -new archive file from the old archive and the constituent files. -When used with -.B t, -it gives a long listing of all information about the files. -When used with -.BR p , -it precedes each file with a name. -.TP -.B c -Create. -Normally -.I arch -will create -.I afile -when it needs to. -The create option suppresses the -normal message that is produced when -.I afile -is created. -.TP -.B l -Local. -Normally -.I arch -places its temporary files in the directory /tmp. -This option causes them to be placed in the local directory. -.SH FILES -/tmp/v* temporaries -.SH "SEE ALSO" -em_ass(I), arch(V), -.SH BUGS -If the same file is mentioned twice in an argument list, -it may be put in the archive twice. diff --git a/man/arch.5 b/man/arch.5 deleted file mode 100644 index 32ce70042..000000000 --- a/man/arch.5 +++ /dev/null @@ -1,52 +0,0 @@ -.\" $Header$ -.TH ARCH 5 -.SH NAME -arch \- archive (library) file format -.SH SYNOPSIS -.B #include "/usr/em/h/arch.h" -.SH DESCRIPTION -The archive command -.I arch -is used to combine several files into -one. -Archives are used mainly as libraries to be searched -by the EM assembler/linker em_ass(VI) or the universal -assembler/linker em_unias(VI). -.PP -A file produced by -.I arch -has a magic number at the start, -followed by the constituent files, each preceded by a file header. -The magic number and header layout as described in the -include file are: -.RS -.PP -.nf -.ta \w'#define 'u +\w'ARMAG 'u -.so ../h/arch.h -.fi -.RE -.LP -The name is a null-terminated string; -The sizes of the other entries are determined as follows: -long's are 4 bytes in PDP-11 order, int are 2 bytes, low order -byte first, char's are 1 byte. -The date is in the -form of -.IR time (2); -the user ID and group ID are numbers; the mode is a bit pattern -per -.IR chmod (2); -the size is counted in bytes. -.PP -Each file begins on a even offset; -a null byte is inserted between files if necessary. -Nevertheless the size given reflects the -actual size of the file exclusive of padding. -.PP -Notice there is no provision for empty areas in an archive -file. -.SH "SEE ALSO" -arch(I), em_ass(VI), em_unias(VI) -.SH BUGS -Coding user and group IDs as characters is a botch. diff --git a/man/em.1 b/man/em.1 deleted file mode 100644 index f8ed40c5d..000000000 --- a/man/em.1 +++ /dev/null @@ -1,87 +0,0 @@ -.\" $Header$ -.TH EM I -.ad -.SH NAME -em \- calling program for em interpreters -.SH SYNOPSIS -em [-t] [+fcp] [loadfile [args ... ...] ] -.SH DESCRIPTION -The loadfile ("e.out" if not specified) is opened to read the first 8 word header. -The format of this header is explained in e.out(V). -One of these 8 words is a flag word -specifying the interpreter options requested at compile time. -The usual setting of these options is +t -f -c -p. -One of these options may be overridden at run time -by the corresponding flag of em. -Based on these options the name of the appropriate interpreter -is constructed. -.PP -This interpreter is first searched for in /usr/em/mach/pdp/int, then in the current -directory. -.PP -The flags control the following options that can be turned off -or on by prepending them with - or + respectively: -.IP t -run time tests for undefined variables, array bounds etc... -This option costs a small amount of memory and some time. -However, it is very useful for debugging. -.IP p -profiling of the entire program. The interpreter maintain tables containing -an estimate of the number of memory cycles used per source line. -This option is expensive in time as well as in memory space. -The result tables made at run time are dumped onto a file named -em_runinf. This file is converted to human readable format -by the program eminform(I) which writes the profiling information -on a file called em_profile. -.IP f -maintain a bit map of all source lines that have been executed. -This map is written also onto the file em_runinf and can be interpreted by eminform(I) which writes in this case the file em_flow. -This option is almost free in time and space. -.IP c -count line usage in tables that -contains for every source line the number of times it -was entered. -These tables are also written onto em_runinf. -Eminform(I) can be used to convert this information into the -file em_count. -Cheap in time, expensive in memory space. -.PP -These flags -give rise to 5 different interpreters which are in the -directory /usr/em/mach/pdp/int -.PP -If the interpreter exits with a non-zero exit status, then the line numbers -of the 64 last executed source lines are dumped on the file -em_runinf -in the current directory. Eminform(I) writes this information -on the human readable file em_last. -.SH "FILES" -.IP /usr/em/mach/pdp/int/em_???? 35 -interpreters proper -.PD 0 -.IP /usr/em/lib/pdp_int/em_???? -source of interpreter -.IP /usr/em/mach/pdp/int/?+ -positive option switch -.IP /usr/em/mach/pdp/int/?- -negative option switch -.IP em_runinf -memory dump containing runtime information -.IP em_profile -profile data -.IP em_count -source line count data -.IP em_flow -source line flow data -.IP em_last -last lines executed -.PD -.SH "SEE ALSO" -eminform(I), ack(I), int(I) -.SH BUGS -Most error messages are self explanatory. -The interpreter stops in case of lack of space with an error -message SEGVIO stack overflow. -If runtime flags are turned on it is advisable to try again -with the default options. -Bugs should be reported to Evert Wattel. diff --git a/man/em_decode.6 b/man/em_decode.6 deleted file mode 100644 index d1901baaf..000000000 --- a/man/em_decode.6 +++ /dev/null @@ -1,40 +0,0 @@ -.\" $Header$ -.TH EM_DECODE VI -.ad -.SH NAME -em_decode,em_encode \- compact to readable EM and v.v. -.SH SYNOPSIS -/usr/em/lib/em_decode [ inputfile [ outputfile ] ] -.br -/usr/em/lib/em_encode [ inputfile [ outputfile ] ] -.SH DESCRIPTION -Most programs involved with the EM project only produce and accept -EM programs in compact form. -These files are only machine readable. -A description of this compact form can be found in [1]. -To inspect the code produced by compilers or to patch them for one reason -or another, you need human readable assembly code. -Em_decode will do the job for you. -.PP -Em_decode accepts the normal compact form in both optimized and -unoptimized form -.PP -Sometimes you have to make some special routines directly -in EM, for instance the routines implementing the system calls. -At these times you may use em_encode to produce compact routines -out of these human readable assembly modules. -.PP -The first argument is the input file. -The second argument is the output file. -Both programs can act as a filter. -.SH "SEE ALSO" -.IP [1] -A.S.Tanenbaum, Ed Keizer, Hans van Staveren & J.W.Stevenson -"Description of a machine architecture for use of -block structured languages" Informatica rapport IR-81. -.IP [2] -ack(I) -.SH DIAGNOSTICS -Error messages are intended to be self-explanatory. -.SH AUTHOR -Johan Stevenson, Vrije Universiteit. diff --git a/man/eminform.1 b/man/eminform.1 deleted file mode 100644 index 18e5dc142..000000000 --- a/man/eminform.1 +++ /dev/null @@ -1,51 +0,0 @@ -.\" $Header$ -.tr ~ -.TH EMINFORM I -.ad -.SH NAME -eminform \- converts runtime information of interpreted em to -human readable form. -.SH SYNOPSIS -eminform -.SH DESCRIPTION -The EM interpreter, em(I), has several debugging features built in. -They can be activated by flag options to em(I). -The EM interpreter collects the information while it runs the program. -When the program is terminated, the interpreter dumps this information onto -a file called em_runinf. -Eminform converts this information in human readable form onto -a set of files with fixed names, the file em_runinf itself is unlinked. -.PP -.in +15 -.ti -13 -~~em_last~~~~A circular buffer is used to keep track of -the last collection of executed source lines. -.ti -13 -~~em_flow~~~~A bit map for all source lines tells which lines -are executed. -.ti -13 -~~em_count~~~Count the number of times each source line was entered. -.ti -13 -~~em_profile~Estimate the number of memory cycles -spent on each source line. -.in -15 -.LP -The most common use of eminform is to print the numbers of the last executed -source lines if an execution error occurred. -No arguments are needed in this case. -.LP -Eminform will create only those files for which there were -interpreter flags turned on. If no runtime error occurred and -no flag was turned on the file em_runinf is not created. In -this case eminform will give the error message "read header -failed". -.SH FILES -em_runinf, em_last, em_flow, em_count, em_profile -.SH "SEE ALSO" -ack(I), int(I), em(I). -.SH BUGS -If an entire procedure is not touched, the the file name in -which this procedure occured is unknown. -If no em_runinf is available the error message is "read header -failed" and a core dump is created. -Bugs should be reported to Evert Wattel diff --git a/man/i86_as.1 b/man/i86_as.1 deleted file mode 100644 index 9f694715e..000000000 --- a/man/i86_as.1 +++ /dev/null @@ -1,145 +0,0 @@ -.\" $Header$ -.TH I86_AS 1 -.ad -.SH NAME -i86_as \- assembler for Intel 8086 -.SH SYNOPSIS -/usr/em/lib/i86_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP segments -An address on the Intel 8086 consists of two pieces: -a segment number and an offset. A memory address is computed as -the segment number shifted left 4 bits + the offset. -Assembly language addresses only give the offset, with the exception of -the address of an inter-segment jump or call (see \fIaddressing modes\fP -below). -For each segment type (.org, .text, .data, or .bss) the segment number -must be given with the .sbase pseudo-instruction. -The syntax is: -.br - .sbase expression -.br -with segment-id one of .org, .text, .data, or .bss. -Example: -.br - .sbase .text 0x1000 - -.IP registers -The Intel 8086 has the following 16-bit registers: -.br -Four general registers: ax (accumulator), bx (base), cx (count), and dx (data). -The upper halves and lower halves of these registers are separately -addressable as ah, bh, ch, dh, and al, bl, cl, dl respectively. -.br -Two pointer registers: sp (stack pointer) and bp (base pointer). -.br -Two index registers: si (source index) and di (destination index). -.br -Four segment registers: cs (code), ds (data), ss (stack), and es (extra). -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning - -expr the value of \fIexpr\fP is immediate data or - an address offset. There is no special - notation for immediate data. - -register one of the aforementioned general registers - or their upper or lower halves, or one of the - four segment registers. - -(expr) the value of expr is the address of the operand. - -(reg) -expr (reg) the value of \fIexpr\fP (if present) + the contents of - \fIreg\fP (which must be a pointer or an index register) - is the address of the operand. - -(preg) (ireg) -expr (preg) (ireg) - the value of \fIexpr\fP (if present) + the contents of - \fIpreg\fP (which must be a pointer register) + the - contents of \fIireg\fP (which must be an index register) - is the address of the operand. - -The next addressing mode is only allowed with the instructions -"callf" or "jmpf". - -expr : expr the value of the first \fIexpr\fP is a segment number, - the value of the second \fIexpr\fP is an address offset. - The (absolute) address of the operand is computed - as described above. -.fi - -.IP instructions -Each time an address is computed the assembler decide which segment register -to use. You can override the assembler's choice by prefixing the instruction -with one of eseg, cseg, sseg, or dseg; these prefixes indicate that the -assembler should choose es, cs, ss, or ds instead. -.br -Example: -.ti +8 -dseg movs -.SH "SEE ALSO" -uni_ass(6), -ack(1), -.br -MCS-86 assembly language reference manual, 1978, Intel Corporation -.SH EXAMPLE -.nf -.ta 8n 16n 24n 32n 40n 48n -An example of Intel 8086 assembly language: - - _panic: - push bp - mov bp,sp - .data - _35: - .word 24944 - .word 26990 - .word 14947 - .word 32 - .text - call _disable - mov ax,_35 - push ax - call _str - pop si - push 4(bp) - call _str - pop si - call _nlcr - call _exit - mov sp,bp - pop bp - ret - .extern _nopanic - _nopanic: - push bp - mov bp,sp - .data - _38: - .word 28526 - .word 24944 - .word 26990 - .word 14947 - .word 32 - .text - mov ax,_38 - push ax - call _str - pop si - push 4(bp) - call _str - pop si - push 6(bp) - call _octal - pop si - mov sp,bp - pop bp - ret -.fi diff --git a/man/m68k2_as.1 b/man/m68k2_as.1 deleted file mode 100644 index 77ef9308a..000000000 --- a/man/m68k2_as.1 +++ /dev/null @@ -1,100 +0,0 @@ -.\" $Header$ -.TH M68K2_AS 1 -.ad -.SH NAME -m68k2_as \- assembler for Motorola 68000 -.SH SYNOPSIS -/usr/em/lib/m68k2_as [options] argument ... -.br -/usr/em/lib/m68k4_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP registers -The 68000 has the following registers: -seven data-registers (d1 - d7), seven address-registers (a1 - a6, sp) -of which sp is the system stack pointer, a program counter (pc), -a status register (sr), and a condition codes register (ccr) which is actually -just the low order byte of the status register. -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning (name) - -reg contents of \fIreg\fP is operand, where \fIreg\fP is - one of the registers mentioned above (register direct) - -(areg) contents of \fIareg\fP is address of operand, where - \fIareg\fP is an address-register - (address register indirect) - -(areg)+ same as (areg), but after the address is used, - \fIareg\fP is incremented by the operand length - (postincrement) - --(areg) same as (areg), but before the address is used, - \fIareg\fP is decremented by the operand length - (predecrement) - -expr(areg) -expr(pc) \fIexpr\fP + the contents of the register yields the - address of the operand (displacement) - -expr(areg, ireg) -expr(pc, ireg) \fIexpr\fP + the contents of the register + the contents - of \fIireg\fP yields the address of the operand. \fIireg\fP is - an address- or a data-register. - \fIireg\fP may be followed by .w or .l indicating whether - the size of the index is a word or a long - (displacement with index) - -expr \fIexpr\fP is the address of the operand - (absolute address) - -#expr \fIexpr\fP is the operand (immediate) -.fi - -Some instructions have as operand a register list. This list consists of -one or more ranges of registers separated by '/'s. A register range consists -of either one register (e.g. d3) or two registers separated by a '-' -(e.g. a2-a4, or d4-d5). The two registers must be in the same set (address- -or data-registers) and the first must have a lower number than the second. -.IP instructions -Some instructions can have a byte, word, or longword operand. -This may be indicated by prepending the mnemonic with .b, .w, or .l -respectively. Default is .w. -.SH "SEE ALSO" -uni_ass(6), -ack(1), -.br -MC68000 16-bit microprocessor User's manual, Motorola Inc, 1979 -.SH EXAMPLE -.sp 2 -.nf -.ta 8n 16n 24n 32n 40n 48n 56n 64n - .define .cii - - .text - .cii: - movem.l a0/d0/d1,.savreg - move.l (sp)+,a0 ! return address - move (sp)+,d0 ! destination size - sub (sp)+,d0 ! destination - source size - bgt 1f - sub d0,sp ! pop extra bytes - bra 3f - 1: - move (sp),d1 - ext.l d1 - swap d1 - asr #1,d0 - 2: - move.w d1,-(sp) - sub #1,d0 - bgt 2b - 3: - move.l a0,-(sp) - movem.l .savreg,a0/d0/d1 - rts -.fi diff --git a/man/m68k_int.1 b/man/m68k_int.1 deleted file mode 100644 index 9948e4e74..000000000 --- a/man/m68k_int.1 +++ /dev/null @@ -1,96 +0,0 @@ -.\" $Header$ -.TH EM I -.ad -.SH NAME -em \- calling program for em interpreters -.SH SYNOPSIS -em [-t] [+fcp] [loadfile [args ... ...] ] -.SH DESCRIPTION -The loadfile ("e.out" if not specified) is opened to read the first 8 word header. -The format of this header is explained in e.out(V). -One of these 8 words is a flag word -specifying the interpreter options requested at compile time. -The usual setting of these options is +t -f -c -p. -These options may be overridden at runtime as follows: -em -t turns the test option of; em +c turns count on ; em +p turns profile -on ; em +c +p turns both count and profile on. -Based on these options the name of the appropriate interpreter -is constructed. -Two versions exist, one for two byte words and four byte pointers and -one for four byte words and pointers. -The information in the header of the e.out file is used by em to select the -right interpreter for the word size of used in the e.out file. -.PP -This interpreter is searched for in /usr/em/lib/int[24]4. -.PP -The flags control the following options that can be turned off -or on by prepending them with - or + respectively: -.IP t -run time tests for undefined variables, array bounds etc... -This option costs a small amount of memory and some time. -However, it is very useful for debugging. -.IP p -profiling of the entire program. The interpreter maintains tables containing -an estimate of the number of processor state cycles used per source line. -A processor state cycle is equal to two internal clock cycles. -This option is expensive in time as well as in memory space. -The result tables made at run time are dumped in a human readable -format onto a file named -em_profile. -.IP f -maintain a bit map of all source lines that have been executed. -This map is written onto a file em_flow . -This option is almost free in time and space. -The file is not easy to read. -Of each procedure only the lines between the first statement and the last -statement are represented in the bit map. -Currently this option is not installed in the em tree. -.IP c -count line usage in tables that -contains for every source line the number of times it -was entered. -These tables are written onto em_count, a human readable file . -This option is cheap in time, but costs some in memory space. -.IP l -dump the line numbers of the last 64 lines entered onto a file named -em_last. -This file will be in a human readable format. -This option is used simultaneously with the test option. -.PP -These flags -give rise to 5 different interpreters which are in the -directory /usr/em/lib/int24 or in /usr/em/lib/int44 -for the two byte word or the four byte word options, respectively. -.PP -.SH "FILES" -.IP /usr/em/lib/int[24]4/em_???? 35 -interpreters proper -.PD 0 -.IP /usr/em/mach/m68k2/int/mloop? -source of interpreter -.IP em_profile -profile data -.IP em_count -source line count data -.IP em_flow -source line flow data -.IP em_last -last lines executed -.PD -.SH "SEE ALSO" -\fIack\fP(I), -\fIint24\fP(I), -\fIint44\fP(I) -.SH BUGS -Most error messages are self explanatory. -If runtime flags are turned on it is advisable to try again -with the default options. -If the interpreter does not work most probably your particular -machine has an other format for the system calls then assumed -in the source. -In that case adapt source file mloopc to your machine. -Also the instruction that causes the machine to allocate stack -space might differ . -In that case adapt the macro \fIclaimstack\fP in deffile. -.SH AUTHOR -Freek van Schagen diff --git a/man/macro.v7 b/man/macro.v7 deleted file mode 100644 index 620e78cf7..000000000 --- a/man/macro.v7 +++ /dev/null @@ -1,66 +0,0 @@ -.\" $Header$ -.de TH -.PD -.br -.bp -.lc -.nr in 5 -.de hd -'sp 2 -'tl '\\$1(\\$2)'Amsterdam Compiler Kit'\\$1(\\$2)' -'sp 2 -\\.. -.wh -6 fo -.wh 0 hd -.nr pi 5 -.. -.de fo -'sp 2 -'tl ''- % -'' -'bp -.. -.de PD -.nr pd 0.5v -.if \\n(.$ .nr pd \\$1 -.. -.de SH -.nr in 5 -.nr pi 5 -.in \\n(in -.ti 0 -.sp \\n(pdu -.ne 2 -.fi -\fB\\$1\fP -.br -.. -.de LP -.PP -.. -.de PP -.sp \\n(pdu -.ne 2 -.in \\n(in -.nr pi 5 -.ns -.. -.de IP -.if \\n(.$-1 .nr pi \\$2 -.sp \\n(pdu -.in \\n(in+\\n(pi -.ta \\n(in \\n(in+\\n(pi -.ti 0 -\fB\\$1\fR\c -.if \w'\fB\\$1\fP'-\\n(pin+1n .br -.. -.de RS -.nr in +5 -.in +5 -.. -.de RE -.in -5 -.nr in -5 -.. -.de RF -\fI\\$1\fP(\\$2)\\$3 -.. diff --git a/man/ns_as.1 b/man/ns_as.1 deleted file mode 100644 index d5fd34b90..000000000 --- a/man/ns_as.1 +++ /dev/null @@ -1,148 +0,0 @@ -.TH NS_ASS VI -.ad -.SH NAME -ns_as \- National Semiconductor 16032 assembler/linker -.SH SYNOPSIS -\&..../lib/ns/as [options] argument ... -.SH DESCRIPTION -The assembler for the National Semiconductor 16032 is based -on the universal assembler \fIuni_ass\fP(VI). -The mnemonics for the instructions are taken from the NS-16000 -Programmers Reference Manual. -The syntax of the instruction operands is similar to the syntax used -in that manual, -although the meaning is sometimes quite different. -The cross assembler issued by National Semiconductor -associates a type (sb,..) with each symbol -and automatically generates sb offset mode for symbols of type sb. -This assembler does not record the types, -each symbol simply produces an untyped value. -.sp 1 -The possible operands are: -.IP "general registers -These are called r0, r1, r2, r3, r4, r5, r6 and r7. -The symbol REG is used to indicate use of any of these 8 registers -in other operands. -.IP "floating point registers -These are called f0, f1, f2, f3, f4, f5, f6 and f7. -.IP "dedicated registers -All types of dedicated registers can be used with the appropriate instructions. -Examples: sb, fp, intbase, ptb1. -.IP expr(REG) -register relative -.IP expr(fp) -frame pointer relative -.IP expr(sb) -static base relative -.IP expr(sp) -stack pointer relative -.IP expr(pc) -program counter relative, -the expression indicates a location in memory from which the current value -of '.' is subtracted by the assembler. -E.g. "movw label(pc),r0; label: .word ..." moves the contents of the word -at \fIlabel\fP to r0. -.IP expr(expr(fb)) -.IP expr(expr(sb)) -.IP expr(expr(sp)) -memory relative -.IP @expr -absolute -.IP external(expr)+expr -The external mode is provided, although this assembler -does not build a module table. -.IP tos -top of stack. -.PD 0 -.sp 1 -.PP -Usage of the scaled index operands is allowed. -.br -The convention used to indicate offset length by appending :B, :W or :D -to offsets is not implemented. -The assembler tries to find out the minimal size needed for any constant -in an operand of the instruction placed in the text segment. -Offsets in instructions outside \fI.text\fP are always four bytes. -.PP -All special operands, e.g. register list, configuration list, have -the same format as in the Programmers Reference Manual. -.PP -Whenever possible the assembler automatically uses the short(quick) opcodes for -jsr(jsb), jump(br), add(addq), cmp(cmpq) and mov(movq). -.SH BUGS -The data types floating and packed-decimal are not supported. -.br -Initialization of floating-point numbers is not possible. -.br -The mnemonics of the slave processor instructions are poorly documented, -the format of the NS-16032S-6 data sheet is used. -.br -The documentation gave contradictory information on the format -of a few instructions. -.IP - -Three different schemes are presented for the encoding -of the last operand of the block instructions. -.IP - -Two different values are specified for -the encoding of the msr register in smr and lmr instructions. -.IP - -Two different possibilities are given for the encoding of -the instructions movsu and movus. -.SH EXAMPLE -.nf -.ta 12n 20n 28n 36n - -00000000 0E0B02 setcfg [ m ] - label: -00000003 EC3E lprb psr,r7 -00000005 2D37 sprw intbase,r6 - -00000007 EA7C br label - -00000009 02803B bsr rout1 -0000000C 228044 cxp rout1 -0000000F 1204 ret 4 -00000011 4204 rett 4 -00000013 328044 rxp rout1 - -00000016 1E0300 rdval r0 -00000019 163028 scsr r5 - -0000001C 3F32 shid r6 -0000001E 7F0B bispsrd r1 -00000020 7C17 caseb r2 -00000022 7FA806 cxpd @6 - -00000025 021F jsr @rout1 - -00000027 BEB529 absf f5,f6 -0000002A EE0538 movusw r7,r0 -0000002D 3E40A101 movbl 1,f5 -00000031 CE440003 cmpmb r0,r1,4 - -00000035 CE4F0800 extsd r1,r1,0,1 -00000039 62A0 save [ r5, r7 ] -0000003B 1E0B00 lmr bpr0,r0 - -0000003E 0E8C04 skpst w -00000041 CC0042 acbb 1,r0,label -00000044 B2 rout1: wait -00000045 7F950C0B adjspd 11(12(sb)) -00000049 7CA50D adjspb 13 -0000004C 7DB50102 adjspw external(1)+2 -00000050 7FBD adjspd tos - -00000052 7CED860807 adjspb 7(8(fp))[r6:w] - -.fi -.SH "SEE ALSO" -uni_ass(VI) -.br -NS 16000 Programmers Reference Manual. Publ. no. 420306565-001PB -.br -NS16032S-6, NS16032S-4 High Performance Microprocessors, november 1982 -.br -publ. no. 420306619-002A. -.PD 0 -.SH AUTHOR -Ed Keizer, Vrije Universiteit diff --git a/man/pdp_as.1 b/man/pdp_as.1 deleted file mode 100644 index afd29b027..000000000 --- a/man/pdp_as.1 +++ /dev/null @@ -1,138 +0,0 @@ -.\" $Header$ -.TH PDP_AS 1 -.ad -.SH NAME -pdp_as \- assembler for PDP 11 -.SH SYNOPSIS -/usr/em/lib/pdp_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP registers -The pdp11 has seven general registers, numbered r0 through r7. -Of these, r6 is the stack pointer and can also be referenced to by \fIsp\fP, -r7 is the program counter and has \fIpc\fP as synonym. There are also six -floating-point registers fr0 through fr5, but the names r0 through r5 can -also be used. From the context will be derived what kind of register is meant. -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning (name) - -reg contents of register reg is operand. - (register) - -(reg) contents of reg is address of operand. - (register deferred) - -(reg)+ as (reg), but after the operand is fetched - the contents of reg is incremented by the - size of the operand. (auto-increment) - -*(reg)+ contents of reg points to address of the operand. - after the operand is fetched, reg is incremented - by two. (auto-increment deferred) - --(reg) as (reg), but before the operand is fetched - the contents of reg is decremented by the - size of the operand. (auto-decrement) - -*-(reg) before the operand is fetched, reg is decremented - by two. then the contents of reg points to the - address of the operand. (auto-decrement deferred) - -expr(reg) value of expr + contents of reg yields address - of operand. (index) - -*expr(reg) value of expr + contents of reg yields pointer - to address of operand. (index deferred) - -$expr the value of expr is the operand. (immediate) - -*$expr the value of expr is the address of the operand. - (absolute) - -expr expr is address of operand. (relative) - -*expr expr points to the address of the operand. - (relative deferred) - -.fi -.IP "condition code instructions" -Two or more of the "clear" instructions (clc, cln, clv, clz), or -two or more of the "set" instructions (sec, sen, sev, sez) may be -or-ed together with `|' to yield a instruction that clears or sets two or more -of the condition-bits. Scc and ccc are not predefined. -.IP "extended branches" -The assembler recognizes conditional branches with a "j" substituted for -the "b". When the target is too remote for a simple branch, a converse branch -over a jmp to the target is generated. Likewise jbr assembles into either br -or jmp. -.IP "floating-point instructions" -The names of several floating-point instructions differ from the names -in the handbook mentioned below. Synonyms ending in "d" for instructions ending -in "f" are not recognized. Some instructions have different names; the mapping -is as below. -.nf -.ta 8n 16n 24n 32n 40n 48n - -handbook pdp_as - -ldcif, ldclf, -ldcid, ldcld movif - -stcfi, stcfl, -stcdi, stcdl movfi - -ldcdf, ldcfd movof - -stcdf, stcfd movfo - -ldexp movie - -stexp movei - -ldd, ldf movf - -std, stf movf - -.fi -The movf instruction assembles into stf, when the first operand is one of the -first three floating-point registers, otherwise it assembles into ldf. -.IP sys -This instruction is synonymous with trap. -.SH EXAMPLE -An example of pdp11 assembly code. -.nf -.ta 8n 16n 24n 32n 40n 48n - -!this is the routine that reads numbers into r0 -!the number is terminated by any non digit -!the non digit is left in r1 -innum: clr r3 !r3 will accumulate the number -inloop: jsr pc,_getchar !read a character into r0 - cmp r0,$0121 !is it a Q? - jeq quit - cmp r0,$48 !is the character a digit? - jlt indone !digits 0-9 have codes 060-071 octal - cmp r0,$56 - jgt indone - mul $10,r3 !r3 = 10 * r3 - sub $48,r3 !convert ascii code to numerical value - add r0,r3 !r3 = old sum * 10 + new digi - jbr inloop - -indone: mov r0,r1 !put the first non digit into r1 - mov r3,r0 !put the number read into r0 - rts pc !return to caller - -.fi -.SH "SEE ALSO" -uni_ass(6), -ack(1), -.br -PDP11/60 processor handbook, Digital Equipment Corporation, 1977 -.SH BUGS -You cannot use *reg in place of (reg). Likewise *(reg) is not understood as -*0(reg). diff --git a/man/z8000_as.1 b/man/z8000_as.1 deleted file mode 100644 index cb2bb7771..000000000 --- a/man/z8000_as.1 +++ /dev/null @@ -1,163 +0,0 @@ -.TH Z8000_AS 1 -.ad -.SH NAME -z8000_as \- assembler for Zilog z8000 (segmented version) -.SH SYNOPSIS -/usr/em/lib/z8000_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP instructions -Instruction mnemonics are implemented exactly as described in -\fIZ8000 PLZ/ASM Assembly Language Programming Manual\fP and -\fIAmZ8001/2 Processor Instruction Set\fP. -.IP registers -The z8000 has sixteen 16-bit general purpose registers specified -as R0 through R15. All sixteen registers can be used as accumulators. -In addition to this, fifteen of the sixteen registers may be used -in addressing mode calculations as either indirect, index or -base-address registers. Because the instruction format encoding -uses the value zero to differentiate between various addressing -modes, register R0 (or the register pair RR0) cannot be used as an -indirect, index or base-address register. -It is also possible to address registers as groups of 8, 32 or 64 bits. -These registers are specified as follows. -.nf -.ta 8n 16n 24n 32n 40n 48n -- RH0, RL0, RH1, RL1, ..., RH7, RL7 for 8-bit regis- - ters. (\fIH\fP stands for high-order byte, and \fIL\fP stands - for low-order byte within a word register). These - registers overlap 16-bit registers R0 through R7. -- RR0, RR2, ..., RR14 for 32-bit register pairs. -- RQ0, RQ4, RQ8 and RQ12 for 64-bit register quadruples. -.fi -Besides register pair RR14 is used as stackpointer. -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning (name-mnemonic) - -$expr the value of expr is the operand. - (immediate-IM) - -reg contents of register reg is operand. Any - register as described above is allowed. - (register-R) - -*reg32 contents of register pair reg32 is add- - ress of operand. Any register pair can - be used except RR0. - (indirect register-IR) - -expr expr is address of operand. - (direct address-DA) - -expr(reg16) value of expr + contents of word regis- - ter reg16 yields address of operand. - Any word register can be used except R0. - (indexed address-X) - -expr expr is address of operand. This mode - is implied by its instruction. It is - only used by CALR, DJNZ, JR, LDAR and - LDR and is the only mode available to - these instructions. In fact this mode - differs not from the mode DA. - (relative address-RA) - -reg32($expr) contents of register pair reg32 + value - of expr yields address of operand. Any - register pair can be used except RR0. - (based address-BA) - -reg32(reg16) contents of register pair reg32 + con- - tents of word register reg16 yields - address of operand. Any register pair/ - word register can be used except RR0/R0. - (based indexed address-BX) - -.fi -.IP "segmented addresses" -Segmented addresses require 23 bits, 7 bits for the segment number -and 16 bits for the offset within a segment. -So segment 0 contains addresses 0-FFFF, segment 1 contains addresses -10000-1FFFF, and so on. -.br -Assembler syntax of addresses and immediate data is as described above -(modes IM, DA and X). -Thus the assembler treats e.g. address 2BC0F as an address in segment 2 -with offset BC0F within the segment. -There is also an explicit way to express this using the, more unusual, -syntax <>offset. -.br -There are two internal representations of segmented addresses -depending on the size of the offset. If the offset fits into 8 bits -the address is stored in one word (the low-order byte containing -the offset, bits 8 to 14 containing the segment number and -bit 15 containing a zero) otherwise the address is stored in two -words (the lower word containing the offset, the upper word as -before but bit 15 containing 1 indicating that the offset is in -the next word). -This is important for instructions which has an operand of mode DA -or X. -.IP "extended branches" -When the target address in a relative jump/call (JR/CALR) -does not fit into the instruction format, the assembler generates -a corresponding `normal' jump/call (JP/CALL). -.SH EXAMPLE -An example of z8000 assembly code. -.nf -.ta 8n 16n 24n 32n 40n 48n - -! This z8000 assembly routine converts a positive number -!(in R1) to a string representing the number and puts this -!string into a buffer (R3 contains the starting address of -!this buffer. The base is in R4 determining %x, %d or %o. - -convert: - exts RR0 !sign-extend R1 - div RR0, R4 !divide by the base - test R1 !R1 contains the quotient - jr EQ, 5f - !if quotient is 0 convert is ready - !else push remainder onto the stack - push *RR14, R0 - calr convert !and again... - pop R0, *RR14 -5: add R0, $060 !add `0' - cp R0, $071 !compare to `9' - jr LE, 8f - add R0, $7 !in case of %x `A'-`F' -8: ldb 0(R3), RL0 !put character into buffer - inc R3 - ret - -.fi -.SH "SEE ALSO" -uni_ass(6). -.br -ack(1). -.br -Z8000 PLZ/ASM Assembly Language Programming Manual, april 1979. -.br -AmZ8001/2 Processor Instruction Set, 1979. -.SH BUGS -You cannot use (reg16) instead of 0(reg16). -.br -Condition codes \fIZ\fP (meaning zero), \fIC\fP (meaning carry) and -(meaning always false) are not implemented. -The first two because they also represent flags and the third one -because it's useless. -So for \fIZ\fP/\fIC\fP use \fIEQ\fP/\fIULT\fP. -.br -The z8000 assembly instruction set as described in the book -\fIAmZ8001/2 Processor Instruction Set\fP differs from the one -described in the manual \fIZ8000 PLZ/ASM Assembly Language Programming -Manual\fP in that the book includes CLRL, LDL (format F5.1) and -PUSHL (format F5.1) which all in fact do not (!) work. -.br -On the other side the book excludes SIN, SIND, SINDR, SINI, SINIR, -SOUT, SOUTD, SOTDR, SOUTI and SOTIR. -Whether these instructions do work as described in the manual has not -been tested yet. diff --git a/man/z80_as.1 b/man/z80_as.1 deleted file mode 100644 index be2efb433..000000000 --- a/man/z80_as.1 +++ /dev/null @@ -1,66 +0,0 @@ -.\" $Header$ -.TH z80_AS 1 -.ad -.SH NAME -z80_as \- assembler for Zilog z80 -.SH SYNOPSIS -/usr/em/lib/z80_as [options] argument ... -.SH DESCRIPTION -This assembler is made with the general framework -described in \fIuni_ass\fP(6). -.SH SYNTAX -.IP registers -The z80 has six general-purpose 8-bit registers: b, c, d, e, h, l; -an 8-bit accumulator: a; an 8-bit flag register: f; an 8-bit interrupt -vector: i; an 8-bit memory refresh register: r; two 16-bit index registers: -ix, iy; a 16-bit stack pointer: sp; and a 16-bit program counter: pc. -The general-purpose registers can be paired to form three registers pairs of -16 bits each: bc, de, hl. -An alternate set of registers is provided that duplicates the accumulator, -the flag register, and the general-purpose registers. The "exx"-instruction -exchanges the contents of the two sets of general-purpose registers; the -contents of the accumulator and flag register can be exchanged with the contents -of their alternates by the "ex af, af2"-instruction. -.IP "addressing modes" -.nf -.ta 8n 16n 24n 32n 40n 48n -syntax meaning - -expr dependent on the instruction, the - value of \fIexpr\fP can be immediate - data or the address of the operand. - There is no special notation for - immediate data. - -(ireg + expr) -(ireg - expr) the contents of ireg (which must be - one of the index-registers) + or - - the - one byte - value of \fIexpr\fP - yield the address of the operand. - -(expr) the value of \fIexpr\fP is the address of - the operand. - -reg the contents of \fIreg\fP - one of the above- - mentioned registers - is the operand. - -(reg) the contents of \fIreg\fP - one of the 16-bit - registers except pc - is the address of - the operand. - -nz, z, nc, c, -po, pe, p, m the letters indicate a condition-code: - nonzero, zero, carry, no carry, - parity odd, parity even, sign positive, - sign negative respectively. Used by conditional - jump, call, and return instructions. - -.fi -.IP instructions -The jr-instruction will automatically be replaced by a jp-instruction if the -target is too remote. -.SH "SEE ALSO" -uni_ass(6), -ack(1), -.br -Z80 Users Manual, Joseph J. Carr, Reston Publishing Company, 1980 diff --git a/modules/compare b/modules/compare deleted file mode 100755 index 5eca5d660..000000000 --- a/modules/compare +++ /dev/null @@ -1,10 +0,0 @@ -case $# in -1) DEST="$1" - SRC=`basename $DEST` - ;; -2) DEST="$2" - SRC="$1" - ;; -*) echo $0 [source] destination ;; -esac -cmp "$SRC" ../../$DEST diff --git a/modules/h/em_CtoO.h b/modules/h/em_CtoO.h deleted file mode 100644 index b7e92a2a1..000000000 --- a/modules/h/em_CtoO.h +++ /dev/null @@ -1,267 +0,0 @@ -#define C_aar O_aar -#define C_aar_narg O_aar_narg -#define C_adf O_adf -#define C_adf_narg O_adf_narg -#define C_adi O_adi -#define C_adi_narg O_adi_narg -#define C_adp O_adp -#define C_ads O_ads -#define C_ads_narg O_ads_narg -#define C_adu O_adu -#define C_adu_narg O_adu_narg -#define C_and O_and -#define C_and_narg O_and_narg -#define C_asp O_asp -#define C_ass O_ass -#define C_ass_narg O_ass_narg -#define C_beq O_beq -#define C_bge O_bge -#define C_bgt O_bgt -#define C_ble O_ble -#define C_blm O_blm -#define C_bls O_bls -#define C_bls_narg O_bls_narg -#define C_blt O_blt -#define C_bne O_bne -#define C_bra O_bra -#define C_bss_cst O_bss_cst -#define C_bss_fcon O_bss_fcon -#define C_bss_pnam O_bss_pnam -#define C_bss_ucon O_bss_ucon -#define C_cai O_cai -#define C_cal O_cal -#define C_cff O_cff -#define C_cfi O_cfi -#define C_cfu O_cfu -#define C_cif O_cif -#define C_cii O_cii -#define C_ciu O_ciu -#define C_close O_close -#define C_cmf O_cmf -#define C_cmf_narg O_cmf_narg -#define C_cmi O_cmi -#define C_cmi_narg O_cmi_narg -#define C_cmp O_cmp -#define C_cms O_cms -#define C_cms_narg O_cms_narg -#define C_cmu O_cmu -#define C_cmu_narg O_cmu_narg -#define C_com O_com -#define C_com_narg O_com_narg -#define C_con_cst O_con_cst -#define C_con_fcon O_con_fcon -#define C_con_pnam O_con_pnam -#define C_con_scon O_con_scon -#define C_con_ucon O_con_ucon -#define C_csa O_csa -#define C_csa_narg O_csa_narg -#define C_csb O_csb -#define C_csb_narg O_csb_narg -#define C_cst O_cst -#define C_cuf O_cuf -#define C_cui O_cui -#define C_cuu O_cuu -#define C_dch O_dch -#define C_dec O_dec -#define C_dee O_dee -#define C_del O_del -#define C_df_dlb O_df_dlb -#define C_df_dnam O_df_dnam -#define C_df_ilb O_df_ilb -#define C_dlb O_dlb -#define C_dnam O_dnam -#define C_dup O_dup -#define C_dus O_dus -#define C_dus_narg O_dus_narg -#define C_dvf O_dvf -#define C_dvf_narg O_dvf_narg -#define C_dvi O_dvi -#define C_dvi_narg O_dvi_narg -#define C_dvu O_dvu -#define C_dvu_narg O_dvu_narg -#define C_end O_end -#define C_end_narg O_end_narg -#define C_exc O_exc -#define C_exg O_exg -#define C_exg_narg O_exg_narg -#define C_exp O_exp -#define C_fcon O_fcon -#define C_fef O_fef -#define C_fef_narg O_fef_narg -#define C_fif O_fif -#define C_fif_narg O_fif_narg -#define C_fil O_fil -#define C_gto O_gto -#define C_hol_cst O_hol_cst -#define C_hol_fcon O_hol_fcon -#define C_hol_pnam O_hol_pnam -#define C_hol_ucon O_hol_ucon -#define C_icon O_icon -#define C_ilb O_ilb -#define C_inc O_inc -#define C_ine O_ine -#define C_init O_init -#define C_inl O_inl -#define C_inn O_inn -#define C_inn_narg O_inn_narg -#define C_inp O_inp -#define C_ior O_ior -#define C_ior_narg O_ior_narg -#define C_lae O_lae -#define C_lal O_lal -#define C_lar O_lar -#define C_lar_narg O_lar_narg -#define C_ldc O_ldc -#define C_lde O_lde -#define C_ldf O_ldf -#define C_ldl O_ldl -#define C_lfr O_lfr -#define C_lil O_lil -#define C_lim O_lim -#define C_lin O_lin -#define C_lni O_lni -#define C_loc O_loc -#define C_loe O_loe -#define C_lof O_lof -#define C_loi O_loi -#define C_lol O_lol -#define C_lor O_lor -#define C_los O_los -#define C_los_narg O_los_narg -#define C_lpb O_lpb -#define C_lpi O_lpi -#define C_lxa O_lxa -#define C_lxl O_lxl -#define C_magic O_magic -#define C_mes_begin O_mes_begin -#define C_mes_end O_mes_end -#define C_mlf O_mlf -#define C_mlf_narg O_mlf_narg -#define C_mli O_mli -#define C_mli_narg O_mli_narg -#define C_mlu O_mlu -#define C_mlu_narg O_mlu_narg -#define C_mon O_mon -#define C_ngf O_ngf -#define C_ngf_narg O_ngf_narg -#define C_ngi O_ngi -#define C_ngi_narg O_ngi_narg -#define C_nop O_nop -#define C_open O_open -#define C_pnam O_pnam -#define C_pro O_pro -#define C_pro_narg O_pro_narg -#define C_rck O_rck -#define C_rck_narg O_rck_narg -#define C_ret O_ret -#define C_rmi O_rmi -#define C_rmi_narg O_rmi_narg -#define C_rmu O_rmu -#define C_rmu_narg O_rmu_narg -#define C_rol O_rol -#define C_rol_narg O_rol_narg -#define C_rom_cst O_rom_cst -#define C_rom_fcon O_rom_fcon -#define C_rom_pnam O_rom_pnam -#define C_rom_scon O_rom_scon -#define C_rom_ucon O_rom_ucon -#define C_ror O_ror -#define C_ror_narg O_ror_narg -#define C_rtt O_rtt -#define C_sar O_sar -#define C_sar_narg O_sar_narg -#define C_sbf O_sbf -#define C_sbf_narg O_sbf_narg -#define C_sbi O_sbi -#define C_sbi_narg O_sbi_narg -#define C_sbs O_sbs -#define C_sbs_narg O_sbs_narg -#define C_sbu O_sbu -#define C_sbu_narg O_sbu_narg -#define C_scon O_scon -#define C_sde O_sde -#define C_sdf O_sdf -#define C_sdl O_sdl -#define C_set O_set -#define C_set_narg O_set_narg -#define C_sig O_sig -#define C_sil O_sil -#define C_sim O_sim -#define C_sli O_sli -#define C_sli_narg O_sli_narg -#define C_slu O_slu -#define C_slu_narg O_slu_narg -#define C_sri O_sri -#define C_sri_narg O_sri_narg -#define C_sru O_sru -#define C_sru_narg O_sru_narg -#define C_ste O_ste -#define C_stf O_stf -#define C_sti O_sti -#define C_stl O_stl -#define C_str O_str -#define C_sts O_sts -#define C_sts_narg O_sts_narg -#define C_teq O_teq -#define C_tge O_tge -#define C_tgt O_tgt -#define C_tle O_tle -#define C_tlt O_tlt -#define C_tne O_tne -#define C_trp O_trp -#define C_ucon O_ucon -#define C_xor O_xor -#define C_xor_narg O_xor_narg -#define C_zeq O_zeq -#define C_zer O_zer -#define C_zer_narg O_zer_narg -#define C_zge O_zge -#define C_zgt O_zgt -#define C_zle O_zle -#define C_zlt O_zlt -#define C_zne O_zne -#define C_zre O_zre -#define C_zrf O_zrf -#define C_zrf_narg O_zrf_narg -#define C_zrl O_zrl - -#define _10_C_hol_ilb _10_O_hol_ilb -#define _11_C_bss_dnam _11_O_bss_dnam -#define _12_C_bss_dlb _12_O_bss_dlb -#define _13_C_bss_icon _13_O_bss_icon -#define _14_C_bss_ilb _14_O_bss_ilb -#define _15_C_con_dnam _15_O_con_dnam -#define _16_C_con_dlb _16_O_con_dlb -#define _17_C_con_icon _17_O_con_icon -#define _18_C_con_ilb _18_O_con_ilb -#define _19_C_gto_dnam _19_O_gto_dnam -#define _1_C_lae_dnam _1_O_lae_dnam -#define _20_C_gto_dlb _20_O_gto_dlb -#define _21_C_ine_dnam _21_O_ine_dnam -#define _22_C_ine_dlb _22_O_ine_dlb -#define _23_C_rom_dnam _23_O_rom_dnam -#define _24_C_rom_dlb _24_O_rom_dlb -#define _25_C_ina_dnam _25_O_ina_dnam -#define _26_C_ina_dlb _26_O_ina_dlb -#define _27_C_rom_icon _27_O_rom_icon -#define _28_C_rom_ilb _28_O_rom_ilb -#define _29_C_ste_dnam _29_O_ste_dnam -#define _2_C_lae_dlb _2_O_lae_dlb -#define _30_C_ste_dlb _30_O_ste_dlb -#define _31_C_fil_dnam _31_O_fil_dnam -#define _32_C_fil_dlb _32_O_fil_dlb -#define _33_C_lde_dnam _33_O_lde_dnam -#define _34_C_lde_dlb _34_O_lde_dlb -#define _35_C_loe_dnam _35_O_loe_dnam -#define _36_C_loe_dlb _36_O_loe_dlb -#define _37_C_exa_dnam _37_O_exa_dnam -#define _38_C_exa_dlb _38_O_exa_dlb -#define _39_C_dee_dnam _39_O_dee_dnam -#define _3_C_sde_dnam _3_O_sde_dnam -#define _40_C_dee_dlb _40_O_dee_dlb -#define _4_C_sde_dlb _4_O_sde_dlb -#define _5_C_zre_dnam _5_O_zre_dnam -#define _6_C_zre_dlb _6_O_zre_dlb -#define _7_C_hol_dnam _7_O_hol_dnam -#define _8_C_hol_dlb _8_O_hol_dlb -#define _9_C_hol_icon _9_O_hol_icon diff --git a/modules/install b/modules/install deleted file mode 100755 index 7aa57e7b8..000000000 --- a/modules/install +++ /dev/null @@ -1,33 +0,0 @@ -case $# in -1) DEST="$1" - SRC=`basename $DEST` - ;; -2) DEST="$2" - SRC="$1" - ;; -*) echo 'Usage:' $0 [source] destination 1>&2 - exit 1 - ;; -esac -DIR=`expr "$DEST" ':' '\(.*\)/[^/]*' '|' "XXXX"` -case $DIR in -XXXX) echo 'Illegal desination argument:' "$DEST" - exit 1 - ;; -esac -mkdir ../../$DIR > /dev/null 2>&1 -chmod 775 ../../$DIR > /dev/null 2>&1 -if cp "$SRC" ../../$DEST >/dev/null 2>&1 || - { rm -f ../../$DEST >/dev/null 2>&1 && - cp "$SRC" ../../$DEST >/dev/null 2>&1 - } -then - if (ar t ../../$DEST | grep __.SYMDEF ) >/dev/null 2>&1 - then - ranlib ../../$DEST - fi - exit 0 -else - echo Sorry, can not create "$DEST". - exit 1 -fi diff --git a/modules/src/alloc/Makefile b/modules/src/alloc/Makefile deleted file mode 100644 index 5b5f3f98f..000000000 --- a/modules/src/alloc/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -EMHOME=../../.. -HDIR = $(EMHOME)/modules/h -INSTALL=$(EMHOME)/modules/install -COMPARE=$(EMHOME)/modules/compare -INCLUDES = -I. -I$(HDIR) -AR = ar -SUF = o -LIBSUF = a - -CFLAGS = -O $(INCLUDES) $(COPT) - -CSRC = Malloc.c\ - Salloc.c\ - Srealloc.c\ - Realloc.c\ - botch.c\ - clear.c\ - st_alloc.c\ - std_alloc.c \ - No_Mem.c -SOURCES = alloc.h\ - $(CSRC) - -OBJECTS = botch.$(SUF) clear.$(SUF) st_alloc.$(SUF) Malloc.$(SUF) \ - Salloc.$(SUF) \ - Srealloc.$(SUF) Realloc.$(SUF) std_alloc.$(SUF) No_Mem.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: liballoc.$(LIBSUF) - -liballoc.$(LIBSUF): $(OBJECTS) - $(AR) cr liballoc.$(LIBSUF) $(OBJECTS) - -sh -c 'ranlib liballoc.$(LIBSUF)' - -install: all - $(INSTALL) lib/liballoc.$(LIBSUF) - $(INSTALL) man/alloc.3 - $(INSTALL) h/alloc.h - -cmp: all - -$(COMPARE) lib/liballoc.$(LIBSUF) - -$(COMPARE) man/alloc.3 - -$(COMPARE) h/alloc.h - -pr: - @pr Makefile $(SOURCES) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) - -lintlib: - lint $(INCLUDES) -Calloc $(CSRC) - mv llib-lalloc.ln $(EMHOME)/modules/lib - -st_alloc.$(SUF): alloc.h -std_alloc.$(SUF): alloc.h -Malloc.$(SUF): alloc.h diff --git a/modules/src/alloc/in_all.h b/modules/src/alloc/in_all.h deleted file mode 100644 index 9b804e5ae..000000000 --- a/modules/src/alloc/in_all.h +++ /dev/null @@ -1,12 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#ifdef DEBUG -#define PRIVATE -#else -#define PRIVATE static -#endif - -#define EXPORT diff --git a/modules/src/assert/Makefile b/modules/src/assert/Makefile deleted file mode 100644 index 714504a53..000000000 --- a/modules/src/assert/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -EMHOME=../../.. -MODULES=$(EMHOME)/modules -HDIR = $(MODULES)/h -INCLUDES = -I$(HDIR) -CFLAGS = $(INCLUDES) -O $(COPT) -INSTALL = $(MODULES)/install -COMPARE = $(MODULES)/compare -AR = ar -SUF = o -LIBSUF = a - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: libassert.$(LIBSUF) - -libassert.$(LIBSUF): BadAssert.$(SUF) - $(AR) r libassert.$(LIBSUF) BadAssert.$(SUF) - -sh -c 'ranlib libassert.$(LIBSUF)' - -install: all - $(INSTALL) lib/libassert.$(LIBSUF) - $(INSTALL) man/assert.3 - $(INSTALL) h/assert.h - -cmp: all - -$(COMPARE) lib/libassert.$(LIBSUF) - -$(COMPARE) man/assert.3 - -$(COMPARE) h/assert.h - -pr: - @pr Makefile assert.h BadAssert.c - -opr: - make pr | opr - -clean: - rm -f *.$(LIBSUF) *.$(SUF) - -lintlib: - lint $(INCLUDES) -Cassert BadAssert.c - mv llib-lassert.ln $(MODULES)/lib diff --git a/modules/src/em_code/Makefile b/modules/src/em_code/Makefile deleted file mode 100644 index c7d2df901..000000000 --- a/modules/src/em_code/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -EMHOME = ../../.. -ETC = $(EMHOME)/etc -INSTALL = $(EMHOME)/modules/install -COMPARE = $(EMHOME)/modules/compare -CFLAGS = -I$(EMHOME)/h -I$(EMHOME)/modules/h -I$(EMHOME)/modules/src/read_em -I. -O $(COPT) -AR = ar -SUF = o -LIBSUF = a -SRC = bhcst.c bhdlb.c bhdnam.c bhfcon.c bhicon.c bhilb.c bhpnam.c bhucon.c \ - crcst.c crdlb.c crdnam.c crxcon.c crilb.c crpnam.c crscon.c \ - cst.c dfdlb.c dfdnam.c dfilb.c dlb.c dnam.c end.c endarg.c \ - exc.c fcon.c getid.c icon.c ilb.c insert.c internerr.c \ - msend.c op.c opcst.c opdlb.c opdnam.c opilb.c opnarg.c oppnam.c pnam.c \ - pro.c pronarg.c msstart.c psdlb.c psdnam.c pspnam.c scon.c ucon.c \ - C_out.c failed.c em.c - -OBS = failed.$(SUF) insert.$(SUF) internerr.$(SUF) getid.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: em_codeEK.h libeme.$(LIBSUF) libemk.$(LIBSUF) em_code.3 - -install: all - $(INSTALL) lib/libeme.$(LIBSUF) - $(INSTALL) lib/libemk.$(LIBSUF) - $(INSTALL) man/em_code.3 - $(INSTALL) h/em_codeEK.h - -compare: all - -$(COMPARE) lib/libeme.$(LIBSUF) - -$(COMPARE) lib/libemk.$(LIBSUF) - -$(COMPARE) man/em_code.3 - -$(COMPARE) h/em_codeEK.h - -em_code.3: em_code.3X - -sh -c 'tbl < em_code.3X > em_code.3' - -sh -c 'if test -s em_code.3 ; then : ; else cp em_code.3X em_code.3 ; fi ' - -libeme.$(LIBSUF): em_private.h $(SRC) $(OBS) - EMHOME=$(EMHOME); cc="$(CC)"; suf="$(SUF)"; libsuf="$(LIBSUF)"; cflags="-c -DREADABLE_EM $(CFLAGS)"; ar="$(AR)"; export EMHOME cc ar suf libsuf cflags; sh make.sh e $(SRC) - -sh -c 'ranlib libeme.$(LIBSUF)' - -libemk.$(LIBSUF): em_private.h $(SRC) $(OBS) - EMHOME=$(EMHOME); cc="$(CC)"; suf="$(SUF)"; libsuf="$(LIBSUF)"; cflags="-c $(CFLAGS)"; ar="$(AR)"; export EMHOME cc ar suf libsuf cflags; sh make.sh k $(SRC) - -sh -c 'ranlib libemk.$(LIBSUF)' - -em_codeEK.h: make.em.gen $(ETC)/em_table em.nogen - make.em.gen $(ETC)/em_table > em_codeEK.h - cat em.nogen >> em_codeEK.h - -pr: - @pr Makefile em.nogen make.em.gen make.sh insert.h $(SRC) em_private.h - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) em_code.3 em_codeEK.h - -lintlib: make.sh - lint -I. -I../../h -I../../../h -Ceme -DREADABLE_EM $(SRC) - lint -I. -I../../h -I../../../h -Cemk $(SRC) - mv llib-leme.ln llib-lemk.ln $(EMHOME)/modules/lib - -insert.$(SUF): insert.c insert.h - $(CC) $(CFLAGS) -c insert.c diff --git a/modules/src/em_code/crfcon.c b/modules/src/em_code/crfcon.c deleted file mode 100644 index 189f92ae8..000000000 --- a/modules/src/em_code/crfcon.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "em_private.h" - -/* $Header$ */ - -CC_crfcon(op, v, s) - char *v; - arith s; -{ - /* CON or ROM with argument FCON(v,z) - */ - PS(op); - WCON(sp_fcon, v, s); - CEND(); - NL(); -} diff --git a/modules/src/em_code/cricon.c b/modules/src/em_code/cricon.c deleted file mode 100644 index d05186494..000000000 --- a/modules/src/em_code/cricon.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "em_private.h" - -/* $Header$ */ - -CC_cricon(op, v, s) - char *v; - arith s; -{ - /* CON or ROM with argument ICON(v,z) - */ - PS(op); - WCON(sp_icon, v, s); - CEND(); - NL(); -} diff --git a/modules/src/em_code/crucon.c b/modules/src/em_code/crucon.c deleted file mode 100644 index 46b7a007e..000000000 --- a/modules/src/em_code/crucon.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "em_private.h" - -/* $Header$ */ - -CC_crucon(op, v, s) - char *v; - arith s; -{ - /* CON or ROM with argument UCON(v,z) - */ - PS(op); - WCON(sp_ucon, v, s); - CEND(); - NL(); -} diff --git a/modules/src/em_code/e/.distr b/modules/src/em_code/e/.distr deleted file mode 100644 index 66366f55e..000000000 --- a/modules/src/em_code/e/.distr +++ /dev/null @@ -1,2 +0,0 @@ -em.c -em_private.h diff --git a/modules/src/em_code/e/C_failed.c b/modules/src/em_code/e/C_failed.c deleted file mode 100644 index 9b3cd21f0..000000000 --- a/modules/src/em_code/e/C_failed.c +++ /dev/null @@ -1,12 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include - -C_failed() -{ - sys_write(STDERR,"write failed\n",13); - sys_stop(S_EXIT); -} diff --git a/modules/src/em_code/e/em.c b/modules/src/em_code/e/em.c deleted file mode 100644 index 4c79fa88e..000000000 --- a/modules/src/em_code/e/em.c +++ /dev/null @@ -1,159 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* EM CODE OUTPUT ROUTINES */ - -#include "io.c" -#include "em_private.h" - -/* - The C_pt_*() functions serve as formatting functions of the - various EM language constructs. - See "Description of a Machine Architecture for use with - Block Structured Languages" par. 11.2 for the meaning of these - names. -*/ - -C_magic() -{ -} - -/*** the readable code generating routines ***/ - -static -wrs(s) - register char *s; -{ - while (*s) { - C_putbyte(*s++); - } -} - -C_pt_dnam(s) - char *s; -{ - wrs(s); -} - -C_pt_ilb(l) - label l; -{ - char buf[16]; - - sprint(buf, "*%ld", (long) l); - wrs(buf); -} - -extern char em_mnem[][4]; -extern char em_pseu[][4]; - -C_pt_op(x) -{ - C_putbyte(' '); - wrs(em_mnem[x - sp_fmnem]); - C_putbyte(' '); -} - -C_pt_cst(l) - arith l; -{ - char buf[16]; - - sprint(buf, "%ld", (long) l); - wrs(buf); -} - -C_pt_scon(x, y) - char *x; - arith y; -{ - char xbuf[1024]; - register char *p; - char *bts2str(); - - C_putbyte('\''); - p = bts2str(x, (int) y, xbuf); - while (*p) { - if (*p == '\'') { - C_putbyte('\\'); - } - C_putbyte(*p++); - } - C_putbyte('\''); -} - -C_pt_ps(x) -{ - C_putbyte(' '); - wrs(em_pseu[x - sp_fpseu]); - C_putbyte(' '); -} - -C_pt_dlb(l) - label l; -{ - char buf[16]; - - sprint(buf, ".%ld", (long) l); - wrs(buf); -} - -C_pt_doff(l, v) - label l; - arith v; -{ - char buf[16]; - - C_pt_dlb(l); - if (v != 0) { - sprint(buf,"+%ld", (long) v); - wrs(buf); - } -} - -C_pt_noff(s, v) - char *s; - arith v; -{ - char buf[16]; - - wrs(s); - if (v != 0) { - sprint(buf,"+%ld", (long) v); - wrs(buf); - } -} - -C_pt_pnam(s) - char *s; -{ - C_putbyte('$'); - wrs(s); -} - -C_pt_dfilb(l) - label l; -{ - char buf[16]; - - sprint(buf, "%ld", (long) l); - wrs(buf); -} - -C_pt_wcon(sp, v, sz) /* sp_icon, sp_ucon or sp_fcon with int repr */ - int sp; - char *v; - arith sz; -{ - int ch = sp == sp_icon ? 'I' : sp == sp_ucon ? 'U' : 'F'; - - wrs(v); - C_putbyte(ch); - C_pt_cst(sz); -} - -C_pt_nl() { C_putbyte('\n'); } -C_pt_comma() { C_putbyte(','); } -C_pt_ccend() { C_putbyte('?'); } diff --git a/modules/src/em_code/e/em_private.h b/modules/src/em_code/e/em_private.h deleted file mode 100644 index 7a89d6731..000000000 --- a/modules/src/em_code/e/em_private.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* private inclusion file */ - -#include -#include - -/* include the EM description files */ -#include -#include -#include -#include - -/* macros used in the definitions of the interface functions C_* */ -#define OP(x) C_pt_op(x) -#define CST(x) C_pt_cst(x) -#define DCST(x) C_pt_cst(x) -#define SCON(x,y) C_pt_scon((x), (y)) -#define PS(x) C_pt_ps(x) -#define DLB(x) C_pt_dlb(x) -#define DFDLB(x) C_pt_dlb(x) -#define ILB(x) C_pt_ilb(x) -#define DFILB(x) C_pt_dfilb(x) -#define NOFF(x,y) C_pt_noff((x), (y)) -#define DOFF(x,y) C_pt_doff((x), (y)) -#define PNAM(x) C_pt_pnam(x) -#define DNAM(x) C_pt_dnam(x) -#define DFDNAM(x) C_pt_dnam(x) -#define CEND() -#define CCEND() C_pt_ccend() -#define WCON(x,y,z) C_pt_wcon((x), (y), (z)) -#define COMMA() C_pt_comma() -#define NL() C_pt_nl() -#define CILB(x) C_pt_ilb(x) diff --git a/modules/src/em_code/io.c b/modules/src/em_code/io.c deleted file mode 100644 index 8e59e5704..000000000 --- a/modules/src/em_code/io.c +++ /dev/null @@ -1,143 +0,0 @@ -/* $Header$ */ - -/* I/O part of em_code module. - Also contains C_open, C_close -*/ -#include -#include -#include -#include "insert.h" - -int C_ontmpfile = 0; -int C_sequential = 1; -Part *C_curr_part; -Part *C_stable[TABSIZ]; -char *C_tmpdir = TMP_DIR; -int (*C_outpart)(), (*C_swtout)(), (*C_swttmp)(); - -#ifdef INCORE -char *C_BASE; -#endif - -File *C_ofp; - -#ifndef INCORE -File *C_tfr, *C_old_ofp; -char *C_tmpfile; -char *strcpy(), *strcat(); -char *C_ibuf = 0; -long C_current_out; -#endif - -#if BUFSIZ <= 1024 && BIGMACHINE -#define BUFFERSIZ 8*BUFSIZ -#else -#define BUFFERSIZ BUFSIZ -#endif - -static char obuf[BUFFERSIZ]; -char *C_top = &obuf[BUFFERSIZ]; -char *C_old_top; -char *C_old_opp; -#ifdef INCORE -char *C_current_out = obuf; -#else -char *C_opp = obuf; -#endif - -C_flush() { -#ifdef INCORE - static unsigned int bufsiz; - - if (C_ontmpfile) { - if (C_BASE == 0) { - C_BASE = Malloc(BUFFERSIZ); - bufsiz = BUFFERSIZ; - C_current_out = C_BASE; - } - else { - C_BASE = Srealloc(C_BASE, (bufsiz << 1)); - C_current_out = C_BASE + bufsiz; - bufsiz <<= 1; - } - C_top = C_BASE + bufsiz; - return; - } -#endif - if (C_opp != obuf && sys_write(C_ofp, obuf, C_opp - obuf) == 0) { - C_failed(); - } - C_opp = obuf; -} - -#ifndef INCORE -#define Xputbyte(c) if (C_ontmpfile) C_current_out++; put(c) -#else -#define Xputbyte(c) put(c) -#endif - -C_putbyte(c) - int c; -{ - Xputbyte(c); -} - -#define C_putbyte Xputbyte - -C_init(w, p) - arith w, p; -{ -} - -C_open(nm) - char *nm; -{ - /* Open file "nm" for output - */ - - if (nm == 0) - C_ofp = STDOUT; /* standard output */ - else - if (sys_open(nm, OP_WRITE, &C_ofp) == 0) - return 0; - return 1; -} - -C_close() -{ - /* Finish the code-generation. - */ - -#ifndef INCORE - C_flush(); - if (C_tmpfile) { - (*C_swttmp)(); - sys_close(C_ofp); -#else - if (C_BASE) { -#endif - if (C_curr_part) { - C_curr_part->p_parts->pp_end = C_current_out - C_BASE; - } - (*C_swtout)(); - if (! C_sequential) { - (*C_outpart)(0); - } -#ifndef INCORE - sys_close(C_tfr); - sys_remove(C_tmpfile); - if (C_ibuf) free(C_ibuf); -#else - free(C_BASE); -#endif - } - C_flush(); - if (C_ofp != STDOUT) - sys_close(C_ofp); - C_ofp = 0; -} - -C_busy() -{ - return C_ofp != 0; /* true if code is being generated */ -} diff --git a/modules/src/em_code/k/.distr b/modules/src/em_code/k/.distr deleted file mode 100644 index 66366f55e..000000000 --- a/modules/src/em_code/k/.distr +++ /dev/null @@ -1,2 +0,0 @@ -em.c -em_private.h diff --git a/modules/src/em_code/k/C_failed.c b/modules/src/em_code/k/C_failed.c deleted file mode 100644 index 9b3cd21f0..000000000 --- a/modules/src/em_code/k/C_failed.c +++ /dev/null @@ -1,12 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include - -C_failed() -{ - sys_write(STDERR,"write failed\n",13); - sys_stop(S_EXIT); -} diff --git a/modules/src/em_code/k/em.c b/modules/src/em_code/k/em.c deleted file mode 100644 index 752607254..000000000 --- a/modules/src/em_code/k/em.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* EM CODE OUTPUT ROUTINES */ - -#include "io.c" -#include "em_private.h" - -#define put8(x) C_putbyte(x) -#define put16(x) put8((int) x); put8((int) (x >> 8)) -#define put32(x) put16((int) x); put16((int) (x >> 16)) - -/* - The C_pt_*() functions serve as formatting functions of the - various EM language constructs. - See "Description of a Machine Architecture for use with - Block Structured Languages" par. 11.2 for the meaning of these - names. -*/ - -C_magic() -{ - put16(sp_magic); -} - -/*** the compact code generating routines ***/ -#define fit16i(x) ((x) >= (long)0xFFFF8000 && (x) <= (long)0x00007FFF) -#define fit8u(x) ((x) <= 0xFF) /* x is already unsigned */ - -C_pt_ilb(l) - register label l; -{ - if (fit8u(l)) { - put8(sp_ilb1); - put8(l); - } - else { - put8(sp_ilb2); - put16(l); - } -} - -C_pt_dlb(l) - register label l; -{ - if (fit8u(l)) { - put8(sp_dlb1); - put8(l); - } - else { - put8(sp_dlb2); - put16((int)l); - } -} - -C_pt_cst(l) - register arith l; -{ - if (l >= (arith) -sp_zcst0 && l < (arith) (sp_ncst0 - sp_zcst0)) { - /* we can convert 'l' to an int because its value - can be stored in a byte. - */ - put8((int)l + (sp_zcst0 + sp_fcst0)); - } - else - if (fit16i(l)) { /* the cast from long to int causes no trouble here */ - put8(sp_cst2); - put16((int) l); - } - else { - put8(sp_cst4); - put32(l); - } -} - -C_pt_doff(l, v) - label l; - arith v; -{ - if (v == 0) { - C_pt_dlb(l); - } - else { - put8(sp_doff); - C_pt_dlb(l); - C_pt_cst(v); - } -} - -C_pt_noff(s, v) - char *s; - arith v; -{ - if (v == 0) { - C_pt_dnam(s); - } - else { - put8(sp_doff); - C_pt_dnam(s); - C_pt_cst(v); - } -} - -C_pt_dnam(s) - char *s; -{ - put8(sp_dnam); - C_pt_str(s); -} - -C_pt_pnam(s) - char *s; -{ - put8(sp_pnam); - C_pt_str(s); -} - -C_pt_wcon(sp, v, sz) /* sp_icon, sp_ucon or sp_fcon with int repr */ - int sp; - char *v; - arith sz; -{ - /* how 'bout signextension int --> long ??? */ - put8(sp); - C_pt_cst(sz); - C_pt_str(v); -} - -C_pt_str(s) - register char *s; -{ - register int len; - - C_pt_cst((arith) (len = strlen(s))); - while (--len >= 0) { - put8(*s++); - } -} - -C_pt_scon(b, n) - register char *b; - register arith n; -{ - put8(sp_scon); - C_pt_cst(n); - while (--n >= 0) { - put8(*b++); - } -} diff --git a/modules/src/em_code/k/em_private.h b/modules/src/em_code/k/em_private.h deleted file mode 100644 index 9ac1da393..000000000 --- a/modules/src/em_code/k/em_private.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* private inclusion file */ - -#include -#include - -/* include the EM description files */ -#include -#include -#include -#include - -/* macros used in the definitions of the interface functions C_* */ -#define OP(x) C_pt_op(x) -#define CST(x) C_pt_cst(x) -#define DCST(x) C_pt_cst(x) -#define SCON(x,y) C_pt_scon((x), (y)) -#define PS(x) C_pt_ps(x) -#define DLB(x) C_pt_dlb(x) -#define DFDLB(x) C_pt_dlb(x) -#define ILB(x) C_pt_ilb(x) -#define DFILB(x) C_pt_ilb(x) -#define NOFF(x,y) C_pt_noff((x), (y)) -#define DOFF(x,y) C_pt_doff((x), (y)) -#define PNAM(x) C_pt_pnam(x) -#define DNAM(x) C_pt_dnam(x) -#define DFDNAM(x) C_pt_dnam(x) -#define CEND() C_pt_cend() -#define CCEND() C_pt_cend() -#define WCON(x,y,z) C_pt_wcon((x), (y), (z)) -#define COMMA() -#define NL() -#define CILB(x) CST((arith) x) - -#define C_pt_cend() C_putbyte(sp_cend) -#define C_pt_op(x) C_putbyte(x) -#define C_pt_ps(x) C_putbyte(x) diff --git a/modules/src/em_code/make.fun b/modules/src/em_code/make.fun deleted file mode 100755 index 9885b9b56..000000000 --- a/modules/src/em_code/make.fun +++ /dev/null @@ -1,52 +0,0 @@ -TMP=tmp$$ -cat $* >$TMP -ed - $TMP <<'--EOI--' -g/^%/d -g/^$/d -g/^ /.-1,.j -1,$s/[ ]*|[ ]*/|/g -g/NOTIMPLEMENTED/d -1,$s/\([^|]*\)|\([^|]*\)|\(.*\)$/\ -NAME \1\ -HEAD \1\ -PLST \2\ -DECL \2\ -BODY \3/ -$a -END -. -g/^NAME/m$ -g/^PLST/s/[ ][ ]*\([^:]*\):\([^ ]*\)/,\2/g -g/^PLST,/s//PLST / -g/^PLST /s/^PLST \(.*\)$/(\1)/ -g/^HEAD/.,.+1j -g/^HEAD /s/^HEAD \([^(]*\)\(.*\)$/cat >\1.c <<'--EOF--'\ -#include "em_private.h"\ -\ -\1\2/ -g/^DECL/s/[ ][ ]*\([^:]*\):\([^ ]*\)/\ - \1 \2;/g -g/^DECL/d -g/^BODY/s/^BODY \(.*\)$/{\ - \1;\ -}\ ---EOF--/ -1,/^END/-1p -1,/^END/d -g:^NAME:s:^NAME \(.*\)$:cc -c -O -I$1 -I$EMHOME/modules/h -I$EMHOME/h \1.c: -1i -cat >make.sh <<'--EOF--' -: script for making lib -rm -f C_*.o -. -$a -rm -f libem$1.a -cc -c -O -I. -I$1 -I$EMHOME/modules/h -I$EMHOME/h $1/em.c -mv em.o em$1.o -ar rc libem$1.a C_*.o em$1.o insert.o failed.o internerr.o getid.o -rm -f C_*.o ---EOF-- -. -1,$p ---EOI-- -rm -f $TMP diff --git a/modules/src/em_mes/C_ms_lin.c b/modules/src/em_mes/C_ms_lin.c deleted file mode 100644 index 1cc59fdf5..000000000 --- a/modules/src/em_mes/C_ms_lin.c +++ /dev/null @@ -1,15 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1990 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include -#include - -C_ms_lin(l) - int l; -{ - C_mes_begin(ms_lin); - C_cst((arith) l); - C_mes_end(); -} diff --git a/modules/src/em_mes/Makefile b/modules/src/em_mes/Makefile deleted file mode 100644 index 406490059..000000000 --- a/modules/src/em_mes/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -EMHOME = ../../.. -HDIR = $(EMHOME)/modules/h -INSTALL = $(EMHOME)/modules/install -COMPARE = $(EMHOME)/modules/compare -INCLUDES=-I$(EMHOME)/h -I$(HDIR) -CFLAGS = $(INCLUDES) -O $(COPT) -AR = ar -SUF = o -LIBSUF = a - -SRC = C_ms_err.c C_ms_opt.c C_ms_emx.c C_ms_reg.c C_ms_src.c\ - C_ms_flt.c C_ms_com.c C_ms_par.c C_ms_ego.c C_ms_gto.c\ - C_ms_stb.c C_ms_std.c -OBJ = C_ms_err.$(SUF) C_ms_opt.$(SUF) C_ms_emx.$(SUF) C_ms_reg.$(SUF) C_ms_src.$(SUF)\ - C_ms_flt.$(SUF) C_ms_com.$(SUF) C_ms_par.$(SUF) C_ms_ego.$(SUF) C_ms_gto.$(SUF)\ - C_ms_stb.$(SUF) C_ms_std.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: libem_mes.$(LIBSUF) libem_mesCE.$(LIBSUF) libem_mesO.$(LIBSUF) -libem_mes.$(LIBSUF): $(OBJ) - rm -f libem_mes.$(LIBSUF) - $(AR) cr libem_mes.$(LIBSUF) $(OBJ) - -sh -c 'ranlib libem_mes.$(LIBSUF)' - -libem_mesO.$(LIBSUF): - rm -f *.$(SUF) libem_mesO.$(LIBSUF) - $(CC) -c $(CFLAGS) -DPEEPHOLE $(SRC) - $(AR) cr libem_mesO.$(LIBSUF) $(OBJ) - -sh -c 'ranlib libem_mesO.$(LIBSUF)' - rm -f *.$(SUF) - -libem_mesCE.$(LIBSUF): - rm -f *.$(SUF) libem_mesCE.$(LIBSUF) - $(CC) -c $(CFLAGS) -DCODE_EXPANDER $(SRC) - $(AR) cr libem_mesCE.$(LIBSUF) $(OBJ) - -sh -c 'ranlib libem_mesCE.$(LIBSUF)' - rm -f *.$(SUF) - -install: all - $(INSTALL) lib/libem_mes.$(LIBSUF) - $(INSTALL) lib/libem_mesO.$(LIBSUF) - $(INSTALL) lib/libem_mesCE.$(LIBSUF) - $(INSTALL) man/em_mes.3 - -cmp: all - -$(COMPARE) lib/libem_mes.$(LIBSUF) - -$(COMPARE) lib/libem_mesO.$(LIBSUF) - -$(COMPARE) lib/libem_mesCE.$(LIBSUF) - -$(COMPARE) man/em_mes.3 - -pr: - @pr Makefile $(SRC) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) - -lintlib: - lint $(INCLUDES) -Cem_mes $(SRC) - mv llib-lem_mes.ln $(EMHOME)/modules/lib diff --git a/modules/src/em_opt/Makefile b/modules/src/em_opt/Makefile deleted file mode 100644 index 0a8d5f386..000000000 --- a/modules/src/em_opt/Makefile +++ /dev/null @@ -1,180 +0,0 @@ -# $Header$ -EMHOME = ../../.. -INSTALL = $(EMHOME)/modules/install -COMPARE = $(EMHOME)/modules/compare -LINT = lint -BINDIR = $(EMHOME)/lib - -# set HOWMUCH to head -20 to limit number of patterns used -#HOWMUCH = head -20 -HOWMUCH = cat - -LEXLIB = -ll -INCLDIR = -I$(EMHOME)/h -I$(EMHOME)/modules/h -I$(EMHOME)/modules/pkg -PREFLAGS = $(INCLDIR) -DPRIVATE=static# -DDEBUG - -# Enable the next line to produce a version that output's the line number -# from the patterns file each time an optimization is performed. -#PREFLAGS = $(PREFLAGS) -DSTATS - -PROFFLAG = -O -CFLAGS = $(PREFLAGS) $(PROFFLAG) $(COPT) -LINTFLAGS = $(PREFLAGS) -DNORCSID -LLOPT = -CMD = '$(CC) -c $(CFLAGS)' -AR = ar -SUF = o -LIBSUF = a - -LIBOPT = libemopt.$(LIBSUF) -LIBCEOPT = libCEopt.$(LIBSUF) - -.SUFFIXES: .d .r - -.r.d: ; CMD=$(CMD); export CMD; awk -f makefuns.awk $*.r | sh -x - touch $@ - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -CSRC = main.c nopt.c mkstrct.c aux.c outputdfa.c outcalls.c\ - findworst.c initlex.c - -SRCS = Makefile nopt.h parser.h parser.g syntax.l pseudo.r\ - patterns $(CSRC) - -NOFILES = nopt.$(SUF) dfa.$(SUF) trans.$(SUF) aux.$(SUF) mkstrct.$(SUF) - -POFILES = parser.$(SUF) syntax.$(SUF) outputdfa.$(SUF) outcalls.$(SUF) findworst.$(SUF)\ - initlex.$(SUF) Lpars.$(SUF) - -GENFILES = Lpars.h Lpars.c parserdummy parser.c syntax.c \ - dfa.c dfa.c.new trans.c trans.c.new\ - incalls.d incalls.r incalls.r.new pseudo.d - -all: em_nopt $(LIBOPT) $(LIBCEOPT) em_opt.3 - -install: all - $(INSTALL) lib/$(LIBOPT) - $(INSTALL) lib/$(LIBCEOPT) - $(INSTALL) man/em_opt.3 - cp em_nopt.6 $(EMHOME)/man - cp em_nopt $(BINDIR)/em_nopt - -cmp: all - -$(COMPARE) lib/$(LIBOPT) - -$(COMPARE) lib/$(LIBCEOPT) - -$(COMPARE) man/em_opt.3 - -cmp em_nopt $(BINDIR)/em_nopt - -pr: - @pr $(SRCS) - -opr: - make pr | opr - -lint: lintparser lintnopt - -clean: - rm -f O_*.$(SUF) - rm -f O_*.c - rm -f $(NOFILES) main.$(SUF) $(POFILES) - rm -f $(GENFILES) parser em_nopt $(LIBOPT) $(LIBCEOPT) - -# How to build stand alone version of the optimizer - -NOPTLIB = $(EMHOME)/modules/lib/libread_emk.$(LIBSUF)\ - $(EMHOME)/modules/lib/libemk.$(LIBSUF)\ - $(EMHOME)/modules/lib/liballoc.$(LIBSUF)\ - $(EMHOME)/modules/lib/malloc.$(SUF)\ - $(EMHOME)/modules/lib/libprint.$(LIBSUF)\ - $(EMHOME)/modules/lib/libstring.$(LIBSUF)\ - $(EMHOME)/modules/lib/libsystem.$(LIBSUF)\ - $(EMHOME)/lib/em_data.$(LIBSUF) - -em_nopt: incalls.r main.$(SUF) $(NOFILES) - $(CC) -o em_nopt main.$(SUF) $(NOFILES) $(NOPTLIB) - -OLINT = main.c mkstrct.c nopt.c aux.c dfa.c trans.c - -OLINTLIB = $(EMHOME)/modules/lib/llib-lread_emkV.ln\ - $(EMHOME)/modules/lib/llib-lemk.ln\ - $(EMHOME)/modules/lib/llib-lsystem.ln\ - $(EMHOME)/modules/lib/llib-lalloc.ln\ - $(EMHOME)/modules/lib/llib-lprint.ln\ - $(EMHOME)/modules/lib/llib-lstring.ln - -lintnopt: incalls.r $(OLINT) - $(LINT) $(LINTFLAGS) $(OLINT) $(OLINTLIB) - -# How to build the library version of the optimizer - -$(LIBOPT): $(NOFILES) pseudo.d incalls.d - rm -f $(LIBOPT) - ar rc $(LIBOPT) O_*.$(SUF) $(NOFILES) - -sh -c 'ranlib $(LIBOPT)' - -$(LIBCEOPT): incalls.r - rm -f O_*.$(SUF) $(NOFILES) pseudo.d incalls.d - -mv $(LIBOPT) $(LIBOPT).saved - make "EMHOME="$(EMHOME) PREFLAGS='$(INCLDIR) -DPRIVATE=static -DCODE_EXPANDER' $(LIBOPT) - mv $(LIBOPT) $(LIBCEOPT) - -mv $(LIBOPT).saved $(LIBOPT) - rm -f O_*.$(SUF) $(NOFILES) - -incalls.r: patterns parser - -$(EMHOME)/lib/cpp patterns | $(HOWMUCH) >/tmp/patts - parser =' - | '>' - ; -.R -.DE -If the rel_op is missing, the equality -.I == -operator is assumed. The general form of expression is defined later but -basically it involves simple constants, references to EM_mnem arguments -that appear earlier in the pattern and expressions similar to those used -in C expressions. - -The form of the restriction after those EM instructions like -.I adi -whose arguments are optional takes the form: -.DS -.I - opt_arg_restriction : normal_restriction - | 'defined' - | 'undefined' - ; -.R -.DE -The -.I defined -and -.I undefined -indicate that the argument is present -or absent respectively. The normal restriction form implies that the -argument is present and satisfies the restriction. - -The form of the restriction after those EM instructions like -.I lae -whose arguments refer to external object take the form: -.DS -.I - ext_arg_restriction : patarg offset_part? - ; - offset_part : [ '+' | '-' ] expression - ; -.R -.DE -Such an argument has one of three forms: a offset with no name, an -offset form a name or an offset from a label. With no offset part -the restriction requires the argument to be identical to a previous -external argument. With an offset part it requires an identical name -part, (either empty, same name or same label) and supplies a relationship -among the offset parts. It is possible to refer to test for the same -external argument, the same name or to obtain the offset part of an external -argument using the -.I sameext -, -.I samenam -and -.I offset -functions given below. -.LP -The general form of an expression is: -.DS -.I - expression : expression binop expression - | unaryop expression - | '(' expression ')' - | bin_function '(' expression ',' expression ')' - | ext_function '(' patarg ',' patarg ')' - | 'offset' '(' patarg ')' - | patarg - | 'p' - | 'w' - | INTEGER - ; -.R -.DE -.DS -.I - bin_function : 'sfit' - | 'ufit' - | 'samesign' - | 'rotate' - ; -.R -.DE -.DS -.I - ext_function : 'samenam' - | 'sameext' - ; - patarg : '$' INTEGER - ; - binop : "As for C language" - unaryop : "As for C language" -.R -.DE -The INTEGER in the -.I patarg -refers to the first, second, etc. argument in the pattern and it is -required to refer to a pattern that appears earlier in the pattern -The -.I w -and -.I p -refer to the word size and pointer size (in bytes) respectively. The -various function test for: -.IP sfit 10 -the first argument fits as a signed value of -the number of bit specified by the second argument. -.IP ufit 10 -as for sfit but for unsigned values. -.IP samesign 10 -the first argument has the same sign as the second. -.IP rotate 10 -the value of the first argument rotated by the number of bit specified -by the second argument. -.IP samenam 10 -both arguments refer to externals and have either no name, the same name -or same label. -.IP sameext 10 -both arguments refer to the same external. -.IP offset 10 -the argument is an external and this yields it offset part. - -.LP -The global restriction takes the form: -.DS -.I - global_restriction : '?' expression - ; -.R -.DE -and is used to express restrictions that cannot be expressed as simple -restrictions on a single argument or are can be expressed in a more -readable fashion as a global restriction. An example of such a rule is: -.DS -.I - dup w ldl stf ? p==2*w : ldl $2 stf $3 ldl $2 lof $3 -.R -.DE -which says that this rule only applies if the pointer size is twice the -word size. - -.NH -Incompatibilities with Previous Optimizer -.LP -The current table format is not compatible with previous versions of the -peephole optimizer tables. In particular the previous table had no provision -for local restrictions and only the equivalent of the global restriction. -This meant that our -.I '?' -character that announces the presence of the optional global restriction was -not required. The previous optimizer performed a number of other tasks that -were unrelated to optimization that were possible because the old optimizer -read the EM code for a complete procedure at a time. This included task such -as register variable reference counting and moving the information regarding -the number of bytes of local storage required by a procedure from it -.I end -pseudo instruction to it's -.I pro -pseudo instruction. These tasks are no longer done. If there are required -then the must be performed by some other program in the pipeline. - -.NH -The Parser -.LP -The program to parse the tables and build the pattern table dependent dfa -routines is built from the files: -.IP parser.h 15 -header file -.IP parser.g 15 -LLGen source file defining syntax of table -.IP syntax.l 15 -Lex sources file defining form of tokens in table. -.IP initlex.c 15 -Uses the data in the library -.I em_data.a -to initialize the lexical analyser to recognize EM instruction mnemonics. -.IP outputdfa.c 15 -Routines to output dfa when it has been constructed. -.IP outcalls.c 15 -Routines to output the file -.I incalls.c -defined in section 4. -.IP findworst.c 15 -Routines to analyze patterns to find how to continue matching after a -successful replacement or failed match. - -.LP -The parser checks that the tables conform to the syntax outlined in the -previous section and also mades a number of semantic checks on their -validity. Further versions could make further checks such as looking for -cycles in the rules or checking that each replacement leaves the same -number of bytes on the stack as the pattern it replaces. The parser -builds an internal dfa representation of the rules by combining rules with -common prefixes. All local and global restrictions are combined into a single -test to be performed are a complete pattern has been detected in the input. -The idea is to build a structure so that each of the patterns can be matched -and then the corresponding tests made and the first that succeeds is replaced. -If two rules have the same pattern and both their tests also succeed the one -that appears first in the tables file will be done. Somewhat less obvious -is that id one pattern is a proper prefix of a longer pattern and its test -succeeds then the second pattern will not be checked for. - -A major task of the parser if to decide on the action to take when a rule has -been partially matched or when a pattern has been completely matched but its -test does not succeed. This requires a search of all patterns to see if any -part of the part matched could be part of some other pattern. for example -given the two patterns: -.DS -.I - loc adi w loc adi w : loc $1+$3 adi w - loc adi w loc sbi w : loc $1-$3 adi w -.R -.DE -If the first pattern fails after seeing the input: -.DS -.I - loc adi loc -.R -.DE -the parser will still need to check whether the second pattern matches. -This requires a decision on how to fix up any internal data structures in -the dfa matcher, such as moving some instructions from the pattern to the -output queue and moving the pattern along and then deciding what state -it should continue from. Similar decisions are requires after a pattern -has been replaced. For example if the replacement is empty it is necessary -to backup -.I n-1 -instructions where -.I n -is the length of the longest pattern in the tables. - -.NH -Structure of the Resulting Library - -.LP -The major data structures maintained by the library consist of three queues; -an -.I output -queue of instructions awaiting output, a -.I pattern -queue containing instructions that match the current prefix, and a -.I backup -queue of instructions that have been backed up over and need to be reparsed -for further pattern matches. - -.LP -If no errors are detected by the parser in the tables it output the following -files: -.IP dfa.c 10 -this consists of a large switch statement that maintains the current state of -the dfa and makes a transition to the next state if the next input instruction -matches. -.IP incalls.r 10 -this contains an entry for every EM instruction (plus -.I lab -) giving information on how to build a routine with the name -.I C_xxx -that conforms to the -.I EM_CODE(3) -modules interface. If the EM instruction does not appear in the tables -patterns at all then the dfa routine is called to flush any current queued -output and the the output -.I O_xxx -routine is called. If the EM instruction does appear in a pattern then the instruction is added onto the end of the pattern queue and the dfa routines called -to attempted to make a transition. This file is input to the -.I awk -program -.I makefuns.awk -to produce individual C files with names like -.I C_xxx.c -each containing a single function definition. This enables the loader to -only load those routines that are actually needed when the library is loaded. -.IP trans.c 10 -this contains a routine that is called after each transition to a state that -contains restrictions and replacements. The restrictions a converted to -C expressions and the replacements coded as calls to output instructions -into the output queue. - -.LP -The following files contain code that is independent of the pattern tables: -.IP nopt.c 10 -general routines to initialize, and maintain the data structures. -.IP aux.c 10 -routines to implement the functions used in the rules. -.IP mkcalls.c 10 -code to convert the internal data structures to calls on the output -.I O_xxx -routines when the output queue is flushed. - -.NH -Miscellaneous Issues -.LP -The size of the output and backup queues are fixed in size according to the -values of -.I MAXOUTPUT -and -.I MAXBACKUP -defined in the file -.I nopt.h. -The size of the pattern queue is set to the length of the maximum pattern -length by the tables output by the parser. The queues are implemented as -arrays of pointers to structures containing the instruction and its arguments. -The space for the structures are initially obtained by calls to -.I Malloc -(from the -.I alloc(3) -module), -and freed when the output queue or patterns queue is cleared. These freed -structures are collected on a free list and reused to avoid the overheads -of repeated calls to -.I malloc -and -.I free. - -.LP -The fixed size of the output and pattern queues causes no difficulty in -practice and can only result in some potential optimizations being missed. -When the output queue fills it is simply prematurely flushed and backups -when the backup queue is fill are simply ignored. A possible improvement -would be to flush only part of the output queue when it fills. It should -be noted that it is not possible to statically determine the maximum possible -size for these queues as they need to be unbounded in the worst case. A -study of the rule -.DS -.I - inc dec : -.R -.DE -with the input consisting of -.I N -.I inc -and then -.I N -.I dec -instructions requires an output queue length of -.I N-1 -to find all possible replacements. diff --git a/modules/src/em_opt/mkcalls.c b/modules/src/em_opt/mkcalls.c deleted file mode 100644 index 69c70a608..000000000 --- a/modules/src/em_opt/mkcalls.c +++ /dev/null @@ -1,303 +0,0 @@ -#ifndef NORCSID -static char rcsid[] = "$Header$"; -#endif - -#include "nopt.h" - -static Linenumber = 0; /* Local optimization of lin to lni if possible */ - -OO_mkcalls(p) - struct instr *p; -{ - switch(p->opcode) { - case op_aar: - O_aar(p->acst); break; - case op_adf: - O_adf(p->acst); break; - case op_adi: - O_adi(p->acst); break; - case op_adp: - O_adp(p->acst); break; - case op_ads: - O_ads(p->acst); break; - case op_adu: - O_adu(p->acst); break; - case op_and: - O_and(p->acst); break; - case op_asp: - O_asp(p->acst); break; - case op_ass: - O_ass(p->acst); break; - case op_beq: - O_beq((label)p->acst); break; - case op_bge: - O_bge((label)p->acst); break; - case op_bgt: - O_bgt((label)p->acst); break; - case op_ble: - O_ble((label)p->acst); break; - case op_blm: - O_blm(p->acst); break; - case op_bls: - O_bls(p->acst); break; - case op_blt: - O_blt((label)p->acst); break; - case op_bne: - O_bne((label)p->acst); break; - case op_bra: - O_bra((label)p->acst); break; - case op_cai: - O_cai(); break; - case op_cal: - O_cal(p->apnam); break; - case op_cff: - O_cff(); break; - case op_cfi: - O_cfi(); break; - case op_cfu: - O_cfu(); break; - case op_cif: - O_cif(); break; - case op_cii: - O_cii(); break; - case op_ciu: - O_ciu(); break; - case op_cmf: - O_cmf(p->acst); break; - case op_cmi: - O_cmi(p->acst); break; - case op_cmp: - O_cmp(); break; - case op_cms: - O_cms(p->acst); break; - case op_cmu: - O_cmu(p->acst); break; - case op_com: - O_com(p->acst); break; - case op_csa: - O_csa(p->acst); break; - case op_csb: - O_csb(p->acst); break; - case op_cuf: - O_cuf(); break; - case op_cui: - O_cui(); break; - case op_cuu: - O_cuu(); break; - case op_dch: - O_dch(); break; - case op_dec: - O_dec(); break; - case op_dee: - if(p->argtype==nof_ptyp) O_dee_dlb(p->adlb, p->anoff); - else O_dee_dnam(p->adnam, p->asoff); break; - case op_del: - O_del(p->acst); break; - case op_dup: - O_dup(p->acst); break; - case op_dus: - O_dus(p->acst); break; - case op_dvf: - O_dvf(p->acst); break; - case op_dvi: - O_dvi(p->acst); break; - case op_dvu: - O_dvu(p->acst); break; - case op_exg: - O_exg(p->acst); break; - case op_fef: - O_fef(p->acst); break; - case op_fif: - O_fif(p->acst); break; - case op_fil: - Linenumber = 0; - if(p->argtype==nof_ptyp) O_fil_dlb(p->adlb, p->anoff); - else O_fil_dnam(p->adnam, p->asoff); break; - case op_gto: - if(p->argtype==nof_ptyp) O_gto_dlb(p->adlb, p->anoff); - else O_gto_dnam(p->adnam, p->asoff); break; - case op_inc: - O_inc(); break; - case op_ine: - if(p->argtype==nof_ptyp) O_ine_dlb(p->adlb, p->anoff); - else O_ine_dnam(p->adnam, p->asoff); break; - case op_inl: - O_inl(p->acst); break; - case op_inn: - O_inn(p->acst); break; - case op_ior: - O_ior(p->acst); break; - case op_lab: - Linenumber = 0; - O_df_ilb(p->alab); break; - case op_lae: - if(p->argtype==nof_ptyp) O_lae_dlb(p->adlb, p->anoff); - else O_lae_dnam(p->adnam, p->asoff); break; - case op_lal: - O_lal(p->acst); break; - case op_lar: - O_lar(p->acst); break; - case op_ldc: - O_ldc(p->acst); break; - case op_lde: - if(p->argtype==nof_ptyp) O_lde_dlb(p->adlb, p->anoff); - else O_lde_dnam(p->adnam, p->asoff); break; - case op_ldf: - O_ldf(p->acst); break; - case op_ldl: - O_ldl(p->acst); break; - case op_lfr: - O_lfr(p->acst); break; - case op_lil: - O_lil(p->acst); break; - case op_lim: - O_lim(); break; - case op_lin: - if(Linenumber && p->acst == ++Linenumber) { - O_lni(); - } - else { - O_lin(p->acst); - Linenumber = p->acst; - } - break; - case op_lni: - O_lni(); - Linenumber++; - break; - case op_loc: - O_loc(p->acst); break; - case op_loe: - if(p->argtype==nof_ptyp) O_loe_dlb(p->adlb, p->anoff); - else O_loe_dnam(p->adnam, p->asoff); break; - case op_lof: - O_lof(p->acst); break; - case op_loi: - O_loi(p->acst); break; - case op_lol: - O_lol(p->acst); break; - case op_lor: - O_lor(p->acst); break; - case op_los: - O_los(p->acst); break; - case op_lpb: - O_lpb(); break; - case op_lpi: - O_lpi(p->apnam); break; - case op_lxa: - O_lxa(p->acst); break; - case op_lxl: - O_lxl(p->acst); break; - case op_mlf: - O_mlf(p->acst); break; - case op_mli: - O_mli(p->acst); break; - case op_mlu: - O_mlu(p->acst); break; - case op_mon: - O_mon(); break; - case op_ngf: - O_ngf(p->acst); break; - case op_ngi: - O_ngi(p->acst); break; - case op_nop: - O_nop(); break; - case op_rck: - O_rck(p->acst); break; - case op_ret: - O_ret(p->acst); break; - case op_rmi: - O_rmi(p->acst); break; - case op_rmu: - O_rmu(p->acst); break; - case op_rol: - O_rol(p->acst); break; - case op_ror: - O_ror(p->acst); break; - case op_rtt: - O_rtt(); break; - case op_sar: - O_sar(p->acst); break; - case op_sbf: - O_sbf(p->acst); break; - case op_sbi: - O_sbi(p->acst); break; - case op_sbs: - O_sbs(p->acst); break; - case op_sbu: - O_sbu(p->acst); break; - case op_sde: - if(p->argtype==nof_ptyp) O_sde_dlb(p->adlb, p->anoff); - else O_sde_dnam(p->adnam, p->asoff); break; - case op_sdf: - O_sdf(p->acst); break; - case op_sdl: - O_sdl(p->acst); break; - case op_set: - O_set(p->acst); break; - case op_sig: - O_sig(); break; - case op_sil: - O_sil(p->acst); break; - case op_sim: - O_sim(); break; - case op_sli: - O_sli(p->acst); break; - case op_slu: - O_slu(p->acst); break; - case op_sri: - O_sri(p->acst); break; - case op_sru: - O_sru(p->acst); break; - case op_ste: - if(p->argtype==nof_ptyp) O_ste_dlb(p->adlb, p->anoff); - else O_ste_dnam(p->adnam, p->asoff); break; - case op_stf: - O_stf(p->acst); break; - case op_sti: - O_sti(p->acst); break; - case op_stl: - O_stl(p->acst); break; - case op_str: - O_str(p->acst); break; - case op_sts: - O_sts(p->acst); break; - case op_teq: - O_teq(); break; - case op_tge: - O_tge(); break; - case op_tgt: - O_tgt(); break; - case op_tle: - O_tle(); break; - case op_tlt: - O_tlt(); break; - case op_tne: - O_tne(); break; - case op_trp: - O_trp(); break; - case op_xor: - O_xor(p->acst); break; - case op_zeq: - O_zeq((label)p->acst); break; - case op_zer: - O_zer(p->acst); break; - case op_zge: - O_zge((label)p->acst); break; - case op_zgt: - O_zgt((label)p->acst); break; - case op_zle: - O_zle((label)p->acst); break; - case op_zlt: - O_zlt((label)p->acst); break; - case op_zne: - O_zne((label)p->acst); break; - case op_zre: - if(p->argtype==nof_ptyp) O_zre_dlb(p->adlb, p->anoff); - else O_zre_dnam(p->adnam, p->asoff); break; - case op_zrf: - O_zrf(p->acst); break; - case op_zrl: - O_zrl(p->acst); break; - } -} diff --git a/modules/src/flt_arith/Makefile b/modules/src/flt_arith/Makefile deleted file mode 100644 index b76f9d962..000000000 --- a/modules/src/flt_arith/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# $Header$ -EMHOME = ../../.. -MODDIR=$(EMHOME)/modules -INSTALL = $(MODDIR)/install -COMPARE = $(MODDIR)/compare -INCLUDES = -I. -I$(MODDIR)/h -CFLAGS = -O $(INCLUDES) $(COPT) -AR = ar -SUF = o -LIBSUF = a - -LIBFLT = libflt.$(LIBSUF) - -SRC = flt_ar2flt.c flt_div.c flt_flt2ar.c flt_modf.c flt_str2fl.c \ - flt_cmp.c flt_add.c b64_add.c flt_mul.c flt_nrm.c b64_sft.c \ - flt_umin.c flt_chk.c split.c ucmp.c - -OBJ = flt_ar2flt.$(SUF) flt_div.$(SUF) flt_flt2ar.$(SUF) flt_modf.$(SUF) \ - flt_str2fl.$(SUF) flt_cmp.$(SUF) flt_add.$(SUF) b64_add.$(SUF) \ - flt_mul.$(SUF) flt_nrm.$(SUF) b64_sft.$(SUF) flt_umin.$(SUF) \ - flt_chk.$(SUF) split.$(SUF) ucmp.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: $(LIBFLT) - -test: $(LIBFLT) test.o - $(CC) -o tst test.o $(LIBFLT) - ./tst - -$(LIBFLT): $(OBJ) - rm -f $(LIBFLT) - $(AR) r $(LIBFLT) $(OBJ) - -sh -c 'ranlib $(LIBFLT)' - -install: all - $(INSTALL) lib/$(LIBFLT) - $(INSTALL) h/flt_arith.h - $(INSTALL) man/flt_arith.3 - -cmp: all - -$(COMPARE) lib/$(LIBFLT) - -$(COMPARE) h/flt_arith.h - -$(COMPARE) man/flt_arith.3 - -pr: - @pr Makefile $(SRC) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) $(LIBFLT) - -lintlib: - lint $(INCLUDES) -Cflt $(SRC) - mv llib-lflt.ln $(MODDIR)/lib - -b64_add.$(SUF): flt_misc.h flt_arith.h -flt_ar2flt.$(SUF): flt_misc.h flt_arith.h -flt_div.$(SUF): flt_misc.h flt_arith.h -flt_nrm.$(SUF): flt_misc.h flt_arith.h -b64_sft.$(SUF): flt_misc.h flt_arith.h -flt_chk.$(SUF): flt_misc.h flt_arith.h -flt_flt2ar.$(SUF): flt_misc.h flt_arith.h -flt_str2fl.$(SUF): flt_misc.h flt_arith.h -flt_add.$(SUF): flt_misc.h flt_arith.h -flt_cmp.$(SUF): flt_misc.h flt_arith.h -flt_mul.$(SUF): flt_misc.h flt_arith.h -flt_modf.$(SUF): flt_misc.h flt_arith.h -flt_umin.$(SUF): flt_misc.h -ucmp.$(SUF): flt_misc.h flt_arith.h -split.$(SUF): flt_misc.h flt_arith.h diff --git a/modules/src/flt_arith/misc.h b/modules/src/flt_arith/misc.h deleted file mode 100644 index 254d3134e..000000000 --- a/modules/src/flt_arith/misc.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * (c) copyright 1989 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ - -#include - -/* some short-hands ... */ -#define m1 flt_mantissa.flt_h_32 -#define m2 flt_mantissa.flt_l_32 - -/* some constants */ -#define EXT_MAX 16384 /* max exponent */ -#define EXT_MIN (-16384) /* min exponent */ - -/* hiding of names: */ -#define ucmp flt__ucmp -#define flt_nrm flt__nrm -#define flt_chk flt__chk -#define flt_b64_add flt__64add -#define flt_split flt__split diff --git a/modules/src/idf/Makefile b/modules/src/idf/Makefile deleted file mode 100644 index d170b5b94..000000000 --- a/modules/src/idf/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -EMHOME = ../../.. -INSTALL = $(EMHOME)/modules/install -COMPARE = $(EMHOME)/modules/compare - -all: - -install: all - $(INSTALL) pkg/idf_pkg.body - $(INSTALL) pkg/idf_pkg.spec - $(INSTALL) man/idf.3 - -cmp: all - -$(COMPARE) pkg/idf_pkg.body - -$(COMPARE) pkg/idf_pkg.spec - -$(COMPARE) man/idf.3 - -pr: - @pr Makefile idf_pkg.spec idf_pkg.body - -opr: - make pr | opr - -clean: diff --git a/modules/src/input/Makefile b/modules/src/input/Makefile deleted file mode 100644 index ab4da17a0..000000000 --- a/modules/src/input/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -EMHOME = ../../.. -MODULES = $(EMHOME)/modules -INSTALL = $(MODULES)/install -COMPARE = $(MODULES)/compare -CFLAGS = -O $(COPT) -AR = ar -SUF = o -LIBSUF = a - -OBJECTS = AtEoIF.$(SUF)\ - AtEoIT.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: libinput.$(LIBSUF) - -libinput.$(LIBSUF): $(OBJECTS) - $(AR) cr libinput.$(LIBSUF) $(OBJECTS) - -sh -c 'ranlib libinput.$(LIBSUF)' - -install: all - $(INSTALL) lib/libinput.$(LIBSUF) - $(INSTALL) man/input.3 - $(INSTALL) pkg/inp_pkg.body - $(INSTALL) pkg/inp_pkg.spec - -cmp: all - -$(COMPARE) lib/libinput.$(LIBSUF) - -$(COMPARE) man/input.3 - -$(COMPARE) pkg/inp_pkg.body - -$(COMPARE) pkg/inp_pkg.spec - -pr: - @pr Makefile inp_pkg.spec inp_pkg.body AtEoIF.c AtEoIT.c - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) - -lintlib: - lint -Cinput AtEoIF.c AtEoIT.c - mv llib-linput.ln $(MODULES)/lib diff --git a/modules/src/malloc/Makefile b/modules/src/malloc/Makefile deleted file mode 100644 index 0a4ca6ba5..000000000 --- a/modules/src/malloc/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -EMHOME = ../../.. -INSTALL = $(EMHOME)/modules/install -COMPARE = $(EMHOME)/modules/compare -CFLAGS = -O -I$(EMHOME)/modules/h $(COPT) -SUF = o -RCC = cc #$ must produce a runnable object - -MALLOCSRC = READ_ME size_type.h gensize_type.h param.h impl.h check.h log.h phys.h \ - mal.c log.c phys.c check.c - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: malloc.$(SUF) - -install: all - $(INSTALL) lib/malloc.$(SUF) - -cmp: all - -$(COMPARE) lib/malloc.$(SUF) - -malloc1.c: $(MALLOCSRC) Makefile add_file - rm -f malloc1.c - for i in $(MALLOCSRC) ; do add_file $$i >> malloc1.c ; done - -malloc.c: malloc1.c - cclash -l7 -c malloc1.c > clashes - cid -Fclashes < malloc1.c > malloc.c - -pr: - @pr Makefile add_file $(MALLOCSRC) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) clashes malloc1.c gensize_type.h getsize malloc.c - -gensize_type.h: getsize - getsize > gensize_type.h - -getsize: getsize.c - $(RCC) -o getsize getsize.c diff --git a/modules/src/object/Makefile b/modules/src/object/Makefile deleted file mode 100644 index 6c253adbf..000000000 --- a/modules/src/object/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -EMHOME = ../../.. -MODULES = $(EMHOME)/modules -INSTALL = $(MODULES)/install -COMPARE = $(MODULES)/compare -INCLUDES = -I$(EMHOME)/h -CFLAGS = -O $(INCLUDES) $(COPT) -AR = ar -SUF = o -LIBSUF = a -RCC = cc # must produce a runnable object - -CFILES = rd_arhdr.c wr_arhdr.c \ - rd_ranlib.c wr_ranlib.c \ - rd_bytes.c wr_bytes.c \ - rd.c wr.c \ - wr_putc.c \ - rd_int2.c wr_int2.c \ - rd_unsig2.c \ - rd_long.c wr_long.c -# do not change the order in OFILES -OFILES = rd.$(SUF) rd_arhdr.$(SUF) rd_int2.$(SUF) rd_long.$(SUF) rd_ranlib.$(SUF) rd_unsig2.$(SUF) \ - rd_bytes.$(SUF) wr_arhdr.$(SUF) wr_int2.$(SUF) wr_long.$(SUF) wr_putc.$(SUF) wr.$(SUF) \ - wr_ranlib.$(SUF) wr_bytes.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: libobject.$(LIBSUF) - -install: all - $(INSTALL) lib/libobject.$(LIBSUF) - $(INSTALL) man/object.3 - -compare: all - -$(COMPARE) lib/libobject.$(LIBSUF) - -$(COMPARE) man/object.3 - -pr: - @pr Makefile byte_order.c object.h $(CFILES) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) nohup.out Out byte_order byte_order.h - -libobject.$(LIBSUF): $(OFILES) - $(AR) r libobject.$(LIBSUF) $(OFILES) - -sh -c 'ranlib libobject.$(LIBSUF)' - -depend: byte_order.h - sed '/^#AUTOAUTO/,$$d' Makefile > Makefile.new - echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTO' >> Makefile.new - mkdep $(CFILES) | sed 's/\.c:/\.$(SUF):/' >> Makefile.new - mv Makefile Makefile.$(SUF)ld - mv Makefile.new Makefile - -byte_order: byte_order.c - $(RCC) -o byte_order byte_order.c - -byte_order.h: byte_order - byte_order > byte_order.h - -lintlib: byte_order.h - lint $(INCLUDES) -Cobject $(CFILES) - mv llib-lobject.ln $(MODULES)/lib - -#AUTOAUTOAUTOAUTOAUTOAUTOAUTO -rd_arhdr.$(SUF): byte_order.h object.h -wr_arhdr.$(SUF): byte_order.h object.h -rd_ranlib.$(SUF): byte_order.h object.h -wr_ranlib.$(SUF): byte_order.h object.h -rd.$(SUF): byte_order.h object.h -wr.$(SUF): byte_order.h object.h -rd_int2.$(SUF): byte_order.h object.h -wr_int2.$(SUF): byte_order.h object.h -rd_unsig2.$(SUF): byte_order.h object.h -rd_long.$(SUF): byte_order.h object.h -wr_long.$(SUF): byte_order.h object.h diff --git a/modules/src/object/byte_order.c b/modules/src/object/byte_order.c deleted file mode 100644 index 16da2c2e3..000000000 --- a/modules/src/object/byte_order.c +++ /dev/null @@ -1,54 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#include - -char bytes_reversed = 0; -char words_reversed = 0; -char char_unsigned = 0; - -/* - * Determine the byte/word order in shorts/longs, assuming the size of a short - * is 2 chars, and the size of a long is 4 chars. Not all theoretical - * possibilities are tested; only bytes reversed and/or words reversed. - */ -determine_ordering() -{ - short s; - long l; - register char *cp; - register short *sp; - - cp = (char *)&s; - cp[0] = 0x01; cp[1] = 0x02; - if (s != 0x01 + (0x02 << 8)) - bytes_reversed = 1; - sp = (short *)&l; - sp[0] = 0x0001; sp[1] = 0x0002; - if (l != 0x0001 + (0x0002L << 16)) - words_reversed = 1; -} - -/* - * determine whether characters are unsigned or signed - */ - -uns_char() -{ - char c = 0200; - int i = c; - - if (i > 0) char_unsigned = 1; -} - -main() -{ - determine_ordering(); - uns_char(); - printf("#define BYTES_REVERSED %d\n", bytes_reversed); - printf("#define WORDS_REVERSED %d\n", words_reversed); - printf("#define CHAR_UNSIGNED %d\n", char_unsigned); - return 0; -} diff --git a/modules/src/print/Makefile b/modules/src/print/Makefile deleted file mode 100644 index 3831b133a..000000000 --- a/modules/src/print/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -EMHOME = ../../.. -MODDIR=$(EMHOME)/modules -INSTALL = $(MODDIR)/install -COMPARE = $(MODDIR)/compare -INCLUDES = -I$(MODDIR)/h -CFLAGS = -O $(INCLUDES) $(COPT) -AR = ar -SUF = o -LIBSUF = a - -LIBPRINT = libprint.$(LIBSUF) - -SRC = doprnt.c fprint.c print.c sprint.c format.c -OBJ = doprnt.$(SUF) fprint.$(SUF) print.$(SUF) sprint.$(SUF) format.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: $(LIBPRINT) - -$(LIBPRINT): $(OBJ) - rm -f $(LIBPRINT) - $(AR) r $(LIBPRINT) $(OBJ) - -sh -c 'ranlib $(LIBPRINT)' - -install: all - $(INSTALL) lib/$(LIBPRINT) - $(INSTALL) man/print.3 - -cmp: all - -$(COMPARE) lib/$(LIBPRINT) - -$(COMPARE) man/print.3 - -pr: - @pr Makefile $(SRC) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) $(LIBPRINT) - -lintlib: - lint $(INCLUDES) -Cprint $(SRC) - mv llib-lprint.ln $(MODDIR)/lib - -doprnt.$(SUF): param.h -fprint.$(SUF): param.h -print.$(SUF): param.h -sprint.$(SUF): param.h diff --git a/modules/src/read_em/Makefile b/modules/src/read_em/Makefile deleted file mode 100644 index 34a2fb865..000000000 --- a/modules/src/read_em/Makefile +++ /dev/null @@ -1,119 +0,0 @@ -EMHOME = ../../.. -MODULES = $(EMHOME)/modules -HDIR = $(MODULES)/h -EMHDIR = $(EMHOME)/h -INCLUDES = -I$(HDIR) -I$(EMHDIR) -DEFINES = -DPRIVATE=static -DEXPORT= -CFLAGS = -O $(INCLUDES) $(DEFINES) $(COPT) -INSTALL = $(MODULES)/install -COMPARE = $(MODULES)/compare -AR = ar -SUF = o -LIBSUF = a - -TARGETS = libread_emk.$(LIBSUF)\ - libread_emkV.$(LIBSUF)\ - libread_emeV.$(LIBSUF) # makecallsO.$(SUF) makecallsCE.$(SUF) - -ESRCFILES = read_em.c\ - mkcalls.c\ - EM_vars.c - -KSRCFILES = read_em.c\ - mkcalls.c\ - EM_vars.c - -SRCFILES = em_comp.h\ - read_em.c\ - reade.c\ - readk.c \ - mkcalls.c\ - EM_vars.c - -EV_OFILES = read_emeV.$(SUF) makecallsV.$(SUF) EM_vars.$(SUF) -KV_OFILES = read_emkV.$(SUF) makecallsV.$(SUF) EM_vars.$(SUF) -K_OFILES = read_emk.$(SUF) makecalls.$(SUF) EM_vars.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: $(TARGETS) - -install: all - $(INSTALL) h/em_comp.h - $(INSTALL) lib/libread_emk.$(LIBSUF) - $(INSTALL) lib/libread_emkV.$(LIBSUF) - $(INSTALL) lib/libread_emeV.$(LIBSUF) - $(INSTALL) man/read_em.3 -# $(INSTALL) lib/makecallsO.$(SUF) -# $(INSTALL) lib/makecallsCE.$(SUF) - -cmp: all - -$(COMPARE) h/em_comp.h - -$(COMPARE) lib/libread_emk.$(LIBSUF) - -$(COMPARE) lib/libread_emkV.$(LIBSUF) - -$(COMPARE) lib/libread_emeV.$(LIBSUF) - -$(COMPARE) man/read_em.3 -# -$(COMPARE) lib/makecallsO.$(SUF) -# -$(COMPARE) lib/makecallsCE.$(SUF) - -pr: - @pr Makefile m_C_mnem m_C_mnem_na argtype $(SRCFILES) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) C_mnem C_mnem_narg - -libread_emk.$(LIBSUF): $(K_OFILES) - $(AR) r libread_emk.$(LIBSUF) $(K_OFILES) - -sh -c 'ranlib libread_emk.$(LIBSUF)' - -libread_emkV.$(LIBSUF): $(KV_OFILES) - $(AR) r libread_emkV.$(LIBSUF) $(KV_OFILES) - -sh -c 'ranlib libread_emkV.$(LIBSUF)' - -libread_emeV.$(LIBSUF): $(EV_OFILES) - $(AR) r libread_emeV.$(LIBSUF) $(EV_OFILES) - -sh -c 'ranlib libread_emeV.$(LIBSUF)' - -read_emk.$(SUF): read_em.c em_comp.h readk.c - $(CC) -c $(CFLAGS) -DCOMPACT read_em.c - mv read_em.$(SUF) read_emk.$(SUF) - -read_emkV.$(SUF): read_em.c em_comp.h readk.c - $(CC) -c $(CFLAGS) -DCOMPACT -DCHECKING read_em.c - mv read_em.$(SUF) read_emkV.$(SUF) - -read_emeV.$(SUF): read_em.c em_comp.h reade.c - $(CC) -c $(CFLAGS) -DCHECKING read_em.c - mv read_em.$(SUF) read_emeV.$(SUF) - -makecalls.$(SUF): C_mnem C_mnem_narg em_comp.h mkcalls.c - $(CC) -c $(CFLAGS) mkcalls.c - mv mkcalls.$(SUF) makecalls.$(SUF) - -makecallsV.$(SUF): C_mnem C_mnem_narg em_comp.h mkcalls.c - $(CC) -c $(CFLAGS) -DCHECKING mkcalls.c - mv mkcalls.$(SUF) makecallsV.$(SUF) - -makecallsO.$(SUF): C_mnem C_mnem_narg em_comp.h mkcalls.c - $(CC) -c -DPEEPHOLE $(CFLAGS) mkcalls.c - mv mkcalls.$(SUF) makecallsO.$(SUF) - -makecallsCE.$(SUF): C_mnem C_mnem_narg em_comp.h mkcalls.c - $(CC) -c -DCODE_EXPANDER $(CFLAGS) mkcalls.c - mv mkcalls.$(SUF) makecallsCE.$(SUF) - -C_mnem: m_C_mnem argtype - sh m_C_mnem > C_mnem - -C_mnem_narg: m_C_mnem_na argtype - sh m_C_mnem_na > C_mnem_narg - -lintlib: C_mnem C_mnem_narg - lint $(INCLUDES) $(DEFINES) -DCOMPACT -DCHECKING -Cread_emkV $(KSRCFILES) - lint $(INCLUDES) $(DEFINES) -DCHECKING -Cread_emeV $(ESRCFILES) - mv llib-lread_emeV.ln llib-lread_emkV.ln $(MODULES)/lib diff --git a/modules/src/read_em/m_C_funcs b/modules/src/read_em/m_C_funcs deleted file mode 100755 index dd89cc8b4..000000000 --- a/modules/src/read_em/m_C_funcs +++ /dev/null @@ -1,25 +0,0 @@ -EM_TABLE=../../../etc/em_table -ed - $EM_TABLE << EOF -1,/^\$/d -1,/^\$/d -1,\$s/^\(...\).*/int C_\\1();/ -w blabla1 -q -EOF -ed - $EM_TABLE << A -1,/^\$/d -1,/^\$/d -/^\$/d -1,\$s/^\(...\).*/C_\\1,/ -\$a -}; -. -1i -static int (*C_funcs[])() = { -0, -. -w blabla2 -q -A -cat blabla1 blabla2 > C_funcs -rm blabla1 blabla2 diff --git a/modules/src/string/Makefile b/modules/src/string/Makefile deleted file mode 100644 index 5622bfa86..000000000 --- a/modules/src/string/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -EMHOME = ../../.. -MODULES = $(EMHOME)/modules -INSTALL = $(MODULES)/install -COMPARE = $(MODULES)/compare -AR = ar -SUF = o -LIBSUF = a - -CFLAGS = -O $(COPT) - -SRC = bts2str.c btscat.c btscmp.c btscpy.c btszero.c long2str.c \ - str2bts.c str2long.c strcat.c strcmp.c strcpy.c strindex.c \ - strlen.c strncat.c strncmp.c strncpy.c strrindex.c strzero.c -OBJ = bts2str.$(SUF) btscat.$(SUF) btscmp.$(SUF) btscpy.$(SUF) \ - btszero.$(SUF) long2str.$(SUF) str2bts.$(SUF) str2long.$(SUF) \ - strcat.$(SUF) strcmp.$(SUF) strcpy.$(SUF) strindex.$(SUF) \ - strlen.$(SUF) strncat.$(SUF) strncmp.$(SUF) strncpy.$(SUF) \ - strrindex.$(SUF) strzero.$(SUF) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: libstring.$(LIBSUF) - -libstring.$(LIBSUF): $(OBJ) Makefile - $(AR) r libstring.$(LIBSUF) $(OBJ) - -sh -c 'ranlib libstring.$(LIBSUF)' - -install: all - $(INSTALL) lib/libstring.$(LIBSUF) - $(INSTALL) man/string.3 - -cmp: all - -$(COMPARE) lib/libstring.$(LIBSUF) - -$(COMPARE) man/string.3 - -pr: - @pr Makefile $(SRC) - -opr: - make pr | opr - -clean: - rm -f *.$(SUF) *.$(LIBSUF) - -lintlib: - lint -Cstring $(SRC) - mv llib-lstring.ln $(MODULES)/lib diff --git a/modules/src/system/Makefile b/modules/src/system/Makefile deleted file mode 100644 index f4d4b5a9f..000000000 --- a/modules/src/system/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -EMHOME = ../../.. -MODULES = $(EMHOME)/modules -INSTALL = $(MODULES)/install -COMPARE = $(MODULES)/compare -INCLUDES = -I. -CFLAGS = $(INCLUDES) -O $(COPT) -AR = ar -SUF = o -LIBSUF = a - -LIBSYS = libsystem.$(LIBSUF) -OBJ = access.$(SUF) break.$(SUF) chmode.$(SUF) close.$(SUF) create.$(SUF) \ - filesize.$(SUF) modtime.$(SUF) lock.$(SUF) open.$(SUF) read.$(SUF) \ - remove.$(SUF) stop.$(SUF) system.$(SUF) time.$(SUF) unlock.$(SUF) \ - write.$(SUF) seek.$(SUF) rename.$(SUF) -CSRC = access.c break.c chmode.c close.c create.c filesize.c \ - modtime.c lock.c open.c read.c remove.c stop.c \ - system.c time.c unlock.c write.c seek.c rename.c -SRC = Makefile system.h $(CSRC) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -all: $(LIBSYS) - -$(LIBSYS): $(OBJ) - rm -f $(LIBSYS) - $(AR) r $(LIBSYS) $(OBJ) - -sh -c 'ranlib $(LIBSYS)' - -install: all - $(INSTALL) lib/$(LIBSYS) - $(INSTALL) man/system.3 - $(INSTALL) h/system.h - -cmp: all - -$(COMPARE) lib/$(LIBSYS) - -$(COMPARE) man/system.3 - -$(COMPARE) h/system.h - -clean: - rm -f *.$(SUF) *.$(LIBSUF) - -pr: - @pr $(SRC) - -opr: - make pr | opr - -lintlib: - lint $(INCLUDES) -Csystem $(CSRC) - mv llib-lsystem.ln $(MODULES)/lib - -access.$(SUF): system.h -break.$(SUF): system.h -close.$(SUF): system.h -create.$(SUF): system.h -open.$(SUF): system.h -read.$(SUF): system.h -stop.$(SUF): system.h -system.$(SUF): system.h -write.$(SUF): system.h diff --git a/modules/src/system/exit.c b/modules/src/system/exit.c deleted file mode 100644 index bcad6e8e1..000000000 --- a/modules/src/system/exit.c +++ /dev/null @@ -1,13 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* $Header$ */ -/* called by /lib/crt0.o; needed to suppress the loading of the - standard exit() which performs unnecessary cleanup actions -*/ - -exit(n) -{ - _exit(n); -} diff --git a/util/LLgen/src/tunable.h b/util/LLgen/src/tunable.h deleted file mode 100644 index da9c73bc3..000000000 --- a/util/LLgen/src/tunable.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. - * - * This product is part of the Amsterdam Compiler Kit. - * - * Permission to use, sell, duplicate or disclose this software must be - * obtained in writing. Requests for such permissions may be sent to - * - * Dr. Andrew S. Tanenbaum - * Wiskundig Seminarium - * Vrije Universiteit - * Postbox 7161 - * 1007 MC Amsterdam - * The Netherlands - * - */ - -/* - * L L G E N - * - * An Extended LL(1) Parser Generator - * - * Author : Ceriel J.H. Jacobs - */ - -/* - * tunable.h $Header$ - * Tunable constants - */ - -# define LTEXTSZ 51 /* size of token */ diff --git a/util/ack/Makefile b/util/ack/Makefile deleted file mode 100644 index a834ed918..000000000 --- a/util/ack/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# $Header$ -EMHOME=../.. -HFILES=ack.h list.h trans.h data.h dmach.h grows.h -DSRC=list.c data.c main.c scan.c svars.c trans.c util.c rmach.c run.c grows.c\ - files.c -ISRC=dmach.c intable.c -OBJ=list.o data.o main.o scan.o svars.o trans.o util.o rmach.o run.o \ - dmach.o intable.o grows.o files.o -ACKDIR=$(EMHOME)/lib -FE=fe -INTABLES=pdp -LNTABLES=acc apc abc ocm m2 vax4 i86 i386 m68k2 m68k4 pmds pmds4 mantra \ - m68020 z8000 em22 em24 em44 6500 6800 6805 6809 i80 ns s2650 z80 \ - sun3 sun2 xenix3 minix minixST -INCLUDES=-I$(EMHOME)/h -CFLAGS=-O $(INCLUDES) -LDFLAGS= -BINDIR=$(EMHOME)/bin -MANDIR=$(EMHOME)/man -MODDIR=$(EMHOME)/modules/lib - -head: ack ack.1 - -install: ack ack.1 - rm -f $(BINDIR)/ack - cp ack $(BINDIR)/ack - -cd $(BINDIR) ; \ - for i in $(INTABLES) $(LNTABLES) ; do rm -f $$i ; ln ack $$i ; done - rm -f $(MANDIR)/ack.1 - cp ack.1 $(MANDIR)/ack.1 - -cmp: ack ack.1 - -cmp ack $(BINDIR)/ack - -cmp ack.1 $(MANDIR)/ack.1 - -ack.1: ack.1.X - -sh -c 'tbl < ack.1.X > ack.1' - -sh -c 'if test -s ack.1 ; then : ; else cp ack.1.X ack.1 ; fi' - -clean: - -rm -f *.old *.o ack ack.1 - -ack: $(OBJ) - $(CC) $(LDFLAGS) -o ack $(OBJ) $(MODDIR)/libstring.a - -grows.o files.o list.o run.o \ -data.o main.o scan.o trans.o rmach.o util.o : ack.h list.h - -files.o data.o main.o scan.o run.o trans.o rmach.o: trans.h data.h - -files.o rmach.o trans.o grows.c : grows.h - -rmach.c: dmach.h - -files.o main.o rmach.o : $(EMHOME)/h/em_path.h - -main.o : $(EMHOME)/h/local.h - -svars.o: ack.h - -dmach.c intable.c: mktables dmach.h - : mktables $(ACKDIR) # $(FE) $(INTABLES) - mktables $(ACKDIR) - -mktables: mktables.c - $(CC) -o mktables mktables.c - -pr: - @pr Makefile $(HFILES) $(DSRC) - -opr: - make pr | opr - -lint: $(ISRC) - lint -hbx $(INCLUDES) $(DSRC) $(ISRC) diff --git a/util/ack/malloc.c b/util/ack/malloc.c deleted file mode 100644 index 87a4bce50..000000000 --- a/util/ack/malloc.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. - * - * This product is part of the Amsterdam Compiler Kit. - * - * Permission to use, sell, duplicate or disclose this software must be - * obtained in writing. Requests for such permissions may be sent to - * - * Dr. Andrew S. Tanenbaum - * Wiskundig Seminarium - * Vrije Universiteit - * Postbox 7161 - * 1007 MC Amsterdam - * The Netherlands - * - */ - - -#include "ack.h" -#ifdef DEBUG -#define ASSERT(p) if(!(p))botch("p");else -botch(s) -char *s; -{ - printf("malloc/free botched: %s\n",s); - abort(); -} -#else -#define ASSERT(p) -#endif - -#ifndef NORCSID -static char rcs_id[] = "$Header$" ; -#endif - -/* avoid break bug */ -#ifdef pdp11 -#define GRANULE 64 -#else -#define GRANULE 0 -#endif -/* C storage allocator - * circular first-fit strategy - * works with noncontiguous, but monotonically linked, arena - * each block is preceded by a ptr to the (pointer of) - * the next following block - * blocks are exact number of words long - * aligned to the data type requirements of ALIGN - * pointers to blocks must have BUSY bit 0 - * bit in ptr is 1 for busy, 0 for idle - * gaps in arena are merely noted as busy blocks - * last block of arena (pointed to by alloct) is empty and - * has a pointer to first - * idle blocks are coalesced during space search - * - * a different implementation may need to redefine - * ALIGN, NALIGN, BLOCK, BUSY, INT - * where INT is integer type to which a pointer can be cast -*/ -#define INT int -#define ALIGN int -#define NALIGN 1 -#define WORD sizeof(union store) -#define BLOCK 1024 /* a multiple of WORD*/ -#define BUSY 1 -#define NULL 0 -#define testbusy(p) ((INT)(p)&BUSY) -#define setbusy(p) (union store *)((INT)(p)|BUSY) -#define clearbusy(p) (union store *)((INT)(p)&~BUSY) - -union store { union store *ptr; - ALIGN dummy[NALIGN]; - int calloc; /*calloc clears an array of integers*/ -}; - -static union store allocs[2]; /*initial arena*/ -static union store *allocp; /*search ptr*/ -static union store *alloct; /*arena top*/ -static union store *allocx; /*for benefit of realloc*/ -char *sbrk(); - -char * -malloc(nbytes) -unsigned nbytes; -{ - register union store *p, *q; - register nw; - static temp; /*coroutines assume no auto*/ - - if(allocs[0].ptr==0) { /*first time*/ - allocs[0].ptr = setbusy(&allocs[1]); - allocs[1].ptr = setbusy(&allocs[0]); - alloct = &allocs[1]; - allocp = &allocs[0]; - } - nw = (nbytes+WORD+WORD-1)/WORD; - ASSERT(allocp>=allocs && allocp<=alloct); - ASSERT(allock()); - for(p=allocp; ; ) { - for(temp=0; ; ) { - if(!testbusy(p->ptr)) { - while(!testbusy((q=p->ptr)->ptr)) { - ASSERT(q>p&&qptr = q->ptr; - } - if(q>=p+nw && p+nw>=p) - goto found; - } - q = p; - p = clearbusy(p->ptr); - if(p>q) - ASSERT(p<=alloct); - else if(q!=alloct || p!=allocs) { - ASSERT(q==alloct&&p==allocs); - return(NULL); - } else if(++temp>1) - break; - } - temp = ((nw+BLOCK/WORD)/(BLOCK/WORD))*(BLOCK/WORD); - q = (union store *)sbrk(0); - if(q+temp+GRANULE < q) { - return(NULL); - } - q = (union store *)sbrk(temp*WORD); - if((INT)q == -1) { - return(NULL); - } - ASSERT(q>alloct); - alloct->ptr = q; - if(q!=alloct+1) - alloct->ptr = setbusy(alloct->ptr); - alloct = q->ptr = q+temp-1; - alloct->ptr = setbusy(allocs); - } -found: - allocp = p + nw; - ASSERT(allocp<=alloct); - if(q>allocp) { - allocx = allocp->ptr; - allocp->ptr = p->ptr; - } - p->ptr = setbusy(allocp); - return((char *)(p+1)); -} - -/* freeing strategy tuned for LIFO allocation -*/ -free(ap) -register char *ap; -{ - register union store *p = (union store *)ap; - - ASSERT(p>clearbusy(allocs[1].ptr)&&p<=alloct); - ASSERT(allock()); - allocp = --p; - ASSERT(testbusy(p->ptr)); - p->ptr = clearbusy(p->ptr); - ASSERT(p->ptr > allocp && p->ptr <= alloct); -} - -/* realloc(p, nbytes) reallocates a block obtained from malloc() - * and freed since last call of malloc() - * to have new size nbytes, and old content - * returns new location, or 0 on failure -*/ - -char * -realloc(p, nbytes) -register union store *p; -unsigned nbytes; -{ - register union store *q; - union store *s, *t; - register unsigned nw; - unsigned onw; - - if(testbusy(p[-1].ptr)) - free((char *)p); - onw = p[-1].ptr - p; - q = (union store *)malloc(nbytes); - if(q==NULL || q==p) - return((char *)q); - s = p; - t = q; - nw = (nbytes+WORD-1)/WORD; - if(nw=p) - (q+(q+nw-p))->ptr = allocx; - return((char *)q); -} - -#ifdef DEBUG -allock() -{ -#ifdef DEBUG - register union store *p; - int x; - x = 0; - for(p= &allocs[0]; clearbusy(p->ptr) > p; p=clearbusy(p->ptr)) { - if(p==allocp) - x++; - } - ASSERT(p==alloct); - return(x==1|p==allocp); -#else - return(1); -#endif -} -#endif diff --git a/util/amisc/Makefile b/util/amisc/Makefile deleted file mode 100644 index 3ebbdbd7d..000000000 --- a/util/amisc/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -EM = ../.. -BINDIR = $(EM)/bin -MANDIR = $(EM)/man -LIBDIR = $(EM)/modules/lib -h = $(EM)/h -LDFLAGS = -CFLAGS = $(LDFLAGS) -O -I$h -ALL = anm asize astrip -OFILES = anm.o asize.o astrip.o -CFILES = anm.c asize.c astrip.c -LIBS = $(LIBDIR)/libobject.a - -all: $(ALL) - -anm: anm.c - $(CC) $(CFLAGS) -o anm anm.c $(LIBS) -asize: asize.c - $(CC) $(CFLAGS) -o asize asize.c $(LIBS) -astrip: astrip.c - $(CC) $(CFLAGS) -o astrip astrip.c $(LIBS) -#not installed: -ashow: ashow.c - $(CC) $(CFLAGS) -o ashow ashow.c $(LIBS) - -install: all - for i in $(ALL); do rm -f $(BINDIR)/$$i; cp $$i $(BINDIR)/$$i; done - for i in anm.1 asize.1 astrip.1; do rm -f $(MANDIR)/$$i; cp $$i $(MANDIR)/$$i; done - -cmp: all - -for i in $(ALL); do cmp $$i $(BINDIR)/$$i; done - -for i in anm.1 astrip.1 asize.1 ; do cmp $$i $(MANDIR)/$$i; done - -clean: ; rm -f $(ALL) $(OFILES) - -pr: - @pr `pwd`/Makefile `pwd`/anm.c `pwd`/astrip.c `pwd`/asize.c - -opr: - make pr | opr diff --git a/util/arch/Makefile b/util/arch/Makefile deleted file mode 100644 index 373c1fb17..000000000 --- a/util/arch/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -EMHOME = ../.. -EMH = $(EMHOME)/h -EMBIN = $(EMHOME)/bin -LIB = $(EMHOME)/modules/lib - -LIBS = $(LIB)/libobject.a $(LIB)/libprint.a \ - $(LIB)/libstring.a $(LIB)/libsystem.a - -CFLAGS=-O -I$(EMH) -DDISTRIBUTION -LDFLAGS = - -all: arch aal - -arch: arch.o - $(CC) $(LDFLAGS) -o arch arch.o $(LIBS) - -aal: aal.o - $(CC) $(LDFLAGS) -o aal aal.o $(LIBS) - -arch.o: $(EMH)/arch.h archiver.c - $(CC) $(CFLAGS) -c archiver.c - mv archiver.o arch.o - -aal.o: $(EMH)/arch.h archiver.c $(EMH)/ranlib.h $(EMH)/out.h - $(CC) -DAAL $(CFLAGS) -c archiver.c - mv archiver.o aal.o - -clean: - rm -f aal arch *.o *.old - -install : all - rm -f $(EMBIN)/arch $(EMBIN)/aal - cp aal $(EMBIN)/aal - cp arch $(EMBIN)/arch - rm -f $(EMHOME)/man/arch.1 $(EMHOME)/man/aal.1 $(EMHOME)/man/arch.5 - cp aal.1 $(EMHOME)/man/aal.1 - cp arch.1 $(EMHOME)/man/arch.1 - cp arch.5 $(EMHOME)/man/arch.5 - -cmp : all - -cmp aal $(EMBIN)/aal - -cmp arch $(EMBIN)/arch - -cmp aal.1 $(EMHOME)/man/aal.1 - -cmp arch.1 $(EMHOME)/man/arch.1 - -cmp arch.5 $(EMHOME)/man/arch.5 - -opr: - make pr ^ opr -pr: - @pr Makefile archiver.c diff --git a/util/ass/Makefile b/util/ass/Makefile deleted file mode 100644 index 8d1762fe4..000000000 --- a/util/ass/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -# $Header$ -d=../.. -l=$d/lib -h=$d/h -m=$d/man -ASS_PATH=$l/em_ass - -CFLAGS=-O -I$d/h - -all: ass - -clean: - -rm -f ass *.o maktab *.old asstb.c - -install : all - rm -f $(ASS_PATH) - cp ass $(ASS_PATH) - rm -f $m/em_ass.6 - cp em_ass.6 $m/em_ass.6 - -cmp : all - -cmp ass $(ASS_PATH) - -cmp em_ass.6 $m/em_ass.6 - -lint: ass00.c ass30.c ass40.c ass50.c ass60.c ass70.c \ - ass80.c assci.c assda.c assrl.c asstb.c asscm.c - lint -hpvbx \ - ass00.c ass30.c ass40.c ass50.c ass60.c ass70.c \ - ass80.c assci.c assda.c assrl.c asstb.c asscm.c - - -ass: ass00.o ass30.o ass40.o ass50.o ass60.o ass70.o \ - ass80.o assci.o assda.o assrl.o asstb.o asscm.o \ - $l/em_data.a - $(CC) $(CFLAGS) -o ass \ - ass00.o ass30.o ass40.o ass50.o ass60.o ass70.o \ - ass80.o assci.o assda.o assrl.o asstb.o asscm.o \ - $l/em_data.a - -ass00.o ass40.o ass60.o ass70.o ass80.o assrl.o: \ - $h/local.h $h/em_spec.h $h/as_spec.h \ - $h/em_flag.h $h/arch.h ass00.h assex.h - -assci.o: $h/local.h $h/em_spec.h $h/as_spec.h \ - $h/em_flag.h $h/em_mes.h $h/em_pseu.h \ - $h/em_ptyp.h $h/arch.h ass00.h assex.h - -ass30.o ass50.o : \ - $h/local.h $h/em_spec.h $h/as_spec.h \ - $h/em_flag.h ip_spec.h ass00.h assex.h - -ass80.o: $h/em_path.h - -assda.o: $h/local.h $h/em_spec.h $h/as_spec.h \ - $h/em_flag.h $h/arch.h ass00.h - -asscm.o: ass00.h - -asstb.o: asstb.c - -asstb.c: maktab $d/etc/ip_spec.t - maktab $d/etc/ip_spec.t asstb.c - -maktab: maktab.c $h/em_spec.h ip_spec.h $h/em_flag.h \ - $l/em_data.a - $(CC) -O -o maktab maktab.c $l/em_data.a - -asprint: asprint.p - apc -w -o asprint asprint.p - -opr: - make pr ^ opr - -pr: - @(pr ass00.h assex.h ip_spec.h ass?0.c ass[rcd]?.c \ - maktab.c) diff --git a/util/ass/ip_spec.h b/util/ass/ip_spec.h deleted file mode 100644 index 6c5d86dc3..000000000 --- a/util/ass/ip_spec.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* Contents of flags used when describing interpreter opcodes */ - -#define RCS_IP "$Header$" - -#define OPTYPE 07 /* type field in flag */ - -#define OPMINI 0 /* m MINI */ -#define OPSHORT 1 /* s SHORT */ -#define OPNO 2 /* - No operand */ -#define OP8 3 /* 1 1-byte signed operand */ -#define OP16 4 /* 2 2-byte signed operand */ -#define OP32 5 /* 4 4-byte signed operand */ -#define OP64 6 /* 8 8-byte signed operand */ -#define OP16U 7 /* u 2-byte unsigned operand */ - -#define OPESC 010 /* e escaped opcode */ -#define OPWORD 020 /* w operand is word multiple */ -#define OPNZ 040 /* o operand starts at 1 ( or wordsize if w-flag) */ - -#define OPRANGE 0300 /* Range of operands: Positive, negative, both */ - -#define OP_BOTH 0000 /* the default */ -#define OP_POS 0100 /* p Positive (>=0) operands only */ -#define OP_NEG 0200 /* n Negative (<0) operands only */ - -struct opform { - char i_opcode ; /* the opcode number */ - char i_flag ; /* the flag byte */ - char i_low ; /* the interpreter first opcode */ - char i_num ; /* the number of shorts/minis (optional) */ -}; - -/* Escape indicators */ - -#define ESC 254 /* To escape group */ -#define ESC_L 255 /* To 32 and 64 bit operands */ diff --git a/util/byacc/Makefile b/util/byacc/Makefile deleted file mode 100644 index 2386de5d9..000000000 --- a/util/byacc/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -EMHOME = ../.. - -DEST = $(EMHOME)/bin -MAN = $(EMHOME)/man - -HDRS = defs.h - -CFLAGS = -O -Dvoid=int - -LDFLAGS = - -LIBS = - -LINKER = cc - -OBJS = closure.o \ - error.o \ - lalr.o \ - lr0.o \ - main.o \ - mkpar.o \ - output.o \ - reader.o \ - skeleton.o \ - symtab.o \ - verbose.o \ - warshall.o - -PRINT = pr -f -l88 - -PROGRAM = yacc - -SRCS = closure.c \ - error.c \ - lalr.c \ - lr0.c \ - main.c \ - mkpar.c \ - output.c \ - reader.c \ - skeleton.c \ - symtab.c \ - verbose.c \ - warshall.c - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIBS) - @echo -n "Loading $(PROGRAM) ... " - @$(LINKER) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS) - @echo "done" - -clean:; @rm -f $(OBJS) $(PROGRAM) - -index:; @ctags -wx $(HDRS) $(SRCS) - -install: $(PROGRAM) - @echo Installing $(PROGRAM) in $(DEST) - cp $(PROGRAM) $(DEST)/$(PROGRAM) - cp manpage $(MAN)/yacc.1 - -listing:; @$(PRINT) Makefile $(HDRS) $(SRCS) | lpr - -lint:; @lint $(SRCS) - -program: $(PROGRAM) - -tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS) - -### -closure.o: defs.h -error.o: defs.h -lalr.o: defs.h -lr0.o: defs.h -main.o: defs.h -mkpar.o: defs.h -output.o: defs.h -reader.o: defs.h -skeleton.o: defs.h -symtab.o: defs.h -verbose.o: defs.h -warshall.o: defs.h diff --git a/util/ceg/EM_parser/as_EM_pars/Makefile b/util/ceg/EM_parser/as_EM_pars/Makefile deleted file mode 100644 index efdaa9e01..000000000 --- a/util/ceg/EM_parser/as_EM_pars/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -EM=../../../.. -CEGLIB = $(EM)/lib/ceg -PARLIB = $(CEGLIB)/EM_parser -LIB = $(PARLIB)/as_EM_pars - -OFILES = dist.o error.o -HFILES = arg_type.h em_decl.h em_parser.h - -IFILES = -I$(EM)/h -I$(EM)/modules/h -CC = cc - -.c.o : - $(CC) $(IFILES) -c $< - -all : $(OFILES) - -install: all - -mkdir $(CEGLIB) - -mkdir $(PARLIB) - -mkdir $(LIB) - cp $(OFILES) $(HFILES) $(LIB) - -cmp: all - for i in $(OFILES) $(HFILES) ; do cmp $$i $(LIB)/$$i ; done - -clean: - rm -f *.o - -pr: - @pr Makefile arg_type.h dist.c em_decl.h em_parser.h error.c - -opr: - make pr | opr diff --git a/util/ceg/EM_parser/common/Makefile b/util/ceg/EM_parser/common/Makefile deleted file mode 100644 index cef1cf064..000000000 --- a/util/ceg/EM_parser/common/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -EM=../../../.. -CEGLIB = $(EM)/lib/ceg -PARLIB = $(CEGLIB)/EM_parser -OBJLIB = $(PARLIB)/obj_EM_pars -ASLIB = $(PARLIB)/as_EM_pars - -GFILES = pars.g -OFILES = pars.o Lpars.o scan.o mylex.o default.o C_instr2.o help.o eval.o\ - action.o -IFILES = -I$(EM)/h -I$(EM)/modules/h -CC = cc -CFLAGS = $(IFILES) - -all : dummy - make $(OFILES) - -dummy : $(GFILES) - LLgen $(LLOPT) $(GFILES) - touch dummy - -install: all - -mkdir $(CEGLIB) - -mkdir $(PARLIB) - -mkdir $(OBJLIB) - -mkdir $(ASLIB) - cp $(OFILES) $(ASLIB) - for i in $(OFILES) ; do rm -f $(OBJLIB)/$$i ; done - for i in $(OFILES) ; do ln $(ASLIB)/$$i $(OBJLIB)/$$i ; done - -cmp: all - for i in $(OFILES) ; do cmp $$i $(ASLIB)/$$i ; done - -clean: - rm -f *.o dummy Lpars.[ch] pars.c - -pr: - @pr Makefile C_instr2.c action.c arg_type.h decl.h default.c \ - em_parser.h eval.c help.c mylex.c pars.g scan.c - -opr: - make pr | opr - -Lpars.o : Lpars.h decl.h -pars.o : Lpars.h decl.h diff --git a/util/ceg/EM_parser/obj_EM_pars/Makefile b/util/ceg/EM_parser/obj_EM_pars/Makefile deleted file mode 100644 index f50c374f4..000000000 --- a/util/ceg/EM_parser/obj_EM_pars/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -EM=../../../.. -CEGLIB = $(EM)/lib/ceg -PARLIB = $(CEGLIB)/EM_parser -LIB = $(PARLIB)/obj_EM_pars - -OFILES = dist.o -HFILES = arg_type.h em_parser.h - -IFILES = -I$(EM)/h -I$(EM)/modules/h -CC = cc - -.c.o : - $(CC) $(IFILES) -c $< - -all : $(OFILES) - -install: all - -mkdir $(CEGLIB) - -mkdir $(PARLIB) - -mkdir $(LIB) - cp $(OFILES) $(HFILES) $(LIB) - -cmp: all - for i in $(OFILES) $(HFILES) ; do cmp $$i $(LIB)/$$i ; done - -clean: - rm -f *.o - -pr: - @pr Makefile arg_type.h dist.c em_parser.h - -opr: - make pr | opr diff --git a/util/ceg/as_parser/Makefile b/util/ceg/as_parser/Makefile deleted file mode 100644 index 772f464df..000000000 --- a/util/ceg/as_parser/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -EM=../../.. -CEGLIB = $(EM)/lib/ceg - -GFILES = pars.g -OFILES = pars.o Lpars.o lex.yy.o help.o conversion.o -IFILES = -I$(EM)/h -I$(EM)/modules/h -LIBS = $(EM)/modules/lib/liballoc.a\ - $(EM)/modules/lib/libprint.a\ - $(EM)/modules/lib/libstring.a\ - $(EM)/modules/lib/libsystem.a -CC = cc -CFLAGS = -O -LEXLIB = -ll - -.c.o : - $(CC) $(CFLAGS) $(IFILES) -c $< - -all: as_parser eval/eval - -as_parser: dummy - make $(OFILES) - $(CC) -o as_parser $(OFILES) $(LIBS) $(LEXLIB) - -eval/eval: - ( cd eval ; make eval ) - -install: all - -mkdir $(CEGLIB) - -mkdir $(CEGLIB)/as_parser - -mkdir $(CEGLIB)/as_parser/eval - cp as_parser $(CEGLIB)/as_parser/as_parser - cp eval/eval $(CEGLIB)/as_parser/eval/eval - cp as_parser.h $(CEGLIB)/as_parser/as_parser.h - -cmp: all - -cmp as_parser $(CEGLIB)/as_parser/as_parser - -cmp eval/eval $(CEGLIB)/as_parser/eval/eval - -cmp as_parser.h $(CEGLIB)/as_parser/as_parser.h - -pr: - @pr Makefile as_parser.h const.h conversion.c decl.h help.c pars.g table.l eval/Makefile eval/eval.c eval/states.h - -opr: - make pr | opr - -clean: - rm -f as_parser *.o lex.yy.c Lpars.[ch] pars.c dummy eval/*.o eval/eval - -lex.yy.c : table.l - lex table.l - -dummy : $(GFILES) - LLgen $(LLOPT) $(GFILES) - touch dummy - -Lpars.o : Lpars.h decl.h -pars.o : Lpars.h decl.h -Lpars.o : Lpars.h decl.h -lex.yy.o : Lpars.h decl.h diff --git a/util/ceg/as_parser/eval/Makefile b/util/ceg/as_parser/eval/Makefile deleted file mode 100644 index 22652dafb..000000000 --- a/util/ceg/as_parser/eval/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -CC = cc -CFLAGS = -O - -eval: eval.o - $(CC) $(CFLAGS) -o eval eval.o - -eval.o : states.h diff --git a/util/ceg/assemble/Makefile b/util/ceg/assemble/Makefile deleted file mode 100644 index 18d8cfa40..000000000 --- a/util/ceg/assemble/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -EM=../../.. -CEG = $(EM)/lib/ceg -ASS = $(CEG)/assemble - -ASLIST = assemble.c block_as.c -OBJLIST = assemble.c block_as.c const.h - -all: - -install: - -mkdir $(CEG) - -mkdir $(ASS) - -mkdir $(ASS)/as_assemble - -mkdir $(ASS)/obj_assemble - for i in $(ASLIST) ; do cp as_assemble/$$i $(ASS)/as_assemble/$$i ; done - for i in $(OBJLIST) ; do cp obj_assemble/$$i $(ASS)/obj_assemble/$$i ; done - -cmp: - -for i in $(ASLIST) ; do cp as_assemble/$$i $(ASS)/as_assemble/$$i ; done - -for i in $(OBJLIST) ; do cp obj_assemble/$$i $(ASS)/obj_assemble/$$i ; done - -pr: - @for i in $(ASLIST) ; do pr as_assemble/$$i ; done - @for i in $(OBJLIST) ; do pr obj_assemble/$$i ; done - -opr: - make pr | opr - -clean: diff --git a/util/ceg/ce_back/Makefile b/util/ceg/ce_back/Makefile deleted file mode 100644 index 25f888b3e..000000000 --- a/util/ceg/ce_back/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -EM=../../.. -CEG = $(EM)/lib/ceg -BACK = $(CEG)/ce_back - -ASLIST = Makefile back.h bottom.c bss.c con1.c con2.c con4.c \ - do_close.c do_open.c end_back.c gen1.c gen2.c gen4.c header.h \ - init_back.c reloc1.c reloc2.c reloc4.c rom1.c rom2.c rom4.c \ - set_global.c set_local.c switchseg.c symboldef.c text1.c \ - text2.c text4.c - -OBJLIST = Makefile back.h con2.c con4.c data.c data.h do_close.c do_open.c \ - end_back.c extnd.c gen1.c gen2.c gen4.c hash.h header.h \ - init_back.c label.c memory.c misc.c output.c \ - reloc1.c reloc2.c reloc4.c relocation.c rom2.c rom4.c \ - set_global.c set_local.c switchseg.c symboldef.c symtable.c \ - text2.c text4.c common.c - -all: - -install: - -mkdir $(CEG) - -mkdir $(BACK) - -mkdir $(BACK)/as_back - -mkdir $(BACK)/obj_back - for i in $(ASLIST) ; do cp as_back/$$i $(BACK)/as_back/$$i ; done - for i in $(OBJLIST) ; do cp obj_back/$$i $(BACK)/obj_back/$$i ; done - -cmp: - -for i in $(ASLIST) ; do cmp as_back/$$i $(BACK)/as_back/$$i ; done - -for i in $(OBJLIST) ; do cmp obj_back/$$i $(BACK)/obj_back/$$i ; done - -pr: - @for i in $(ASLIST) ; do pr as_back/$$i ; done - @for i in $(OBJLIST) ; do pr obj_back/$$i ; done - -opr: - make pr | opr - -clean: diff --git a/util/ceg/ce_back/as_back/Makefile b/util/ceg/ce_back/as_back/Makefile deleted file mode 100644 index ca2d4fe43..000000000 --- a/util/ceg/ce_back/as_back/Makefile +++ /dev/null @@ -1,96 +0,0 @@ -EM=../../../.. -CEG=$(EM)/lib/ceg -SOURCE=$(CEG)/ce_back/as_back - -CC = cc -CFLAGS = -O - -IDIRS=-I.\ - -I..\ - -I$(EM)/h\ - -I$(EM)/modules/h - -LIBS=$(EM)/modules/lib/object.a\ - $(EM)/modules/lib/libstring.a\ - $(EM)/modules/lib/libprint.a\ - $(EM)/modules/lib/libsystem.a - -all : bottom.o con1.o con2.o con4.o end_back.o gen1.o gen2.o\ - gen4.o init_back.o reloc1.o reloc2.o reloc4.o bss.o\ - rom1.o rom2.o rom4.o set_global.o set_local.o switchseg.o symboldef.o \ - do_open.o do_close.o text1.o text2.o text4.o - -bottom.o : ../mach.h back.h header.h $(SOURCE)/bottom.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/bottom.c - -bss.o : ../mach.h back.h header.h $(SOURCE)/bss.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/bss.c - -text1.o : ../mach.h back.h header.h $(SOURCE)/text1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/text1.c - -text2.o : ../mach.h back.h header.h $(SOURCE)/text2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/text2.c - -text4.o : ../mach.h back.h header.h $(SOURCE)/text4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/text4.c - -con1.o : ../mach.h back.h header.h $(SOURCE)/con1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con1.c - -con2.o : ../mach.h back.h header.h $(SOURCE)/con2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con2.c - -con4.o : ../mach.h back.h header.h $(SOURCE)/con4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con4.c - -do_open.o : back.h header.h ../mach.h $(SOURCE)/do_open.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/do_open.c - -do_close.o : back.h header.h ../mach.h $(SOURCE)/do_close.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/do_close.c - -gen1.o : back.h header.h ../mach.h $(SOURCE)/gen1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen1.c - -gen2.o : back.h header.h ../mach.h $(SOURCE)/gen2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen2.c - -gen4.o : back.h header.h ../mach.h $(SOURCE)/gen4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen4.c - -init_back.o : header.h back.h ../mach.h $(SOURCE)/init_back.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/init_back.c - -end_back.o : header.h back.h ../mach.h $(SOURCE)/end_back.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/end_back.c - -reloc1.o : back.h header.h ../mach.h $(SOURCE)/reloc1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc1.c - -reloc2.o : back.h header.h ../mach.h $(SOURCE)/reloc2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc2.c - -reloc4.o : back.h header.h ../mach.h $(SOURCE)/reloc4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc4.c - -rom1.o : back.h header.h ../mach.h $(SOURCE)/rom1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom1.c - -rom2.o : back.h header.h ../mach.h $(SOURCE)/rom2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom2.c - -rom4.o : back.h header.h ../mach.h $(SOURCE)/rom4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom4.c - -set_global.o : header.h back.h ../mach.h $(SOURCE)/set_global.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/set_global.c - -set_local.o : header.h back.h ../mach.h $(SOURCE)/set_local.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/set_local.c - -switchseg.o : header.h back.h ../mach.h $(SOURCE)/switchseg.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/switchseg.c - -symboldef.o : header.h back.h ../mach.h $(SOURCE)/symboldef.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/symboldef.c diff --git a/util/ceg/ce_back/as_back/const.h b/util/ceg/ce_back/as_back/const.h deleted file mode 100644 index 0a2068341..000000000 --- a/util/ceg/ce_back/as_back/const.h +++ /dev/null @@ -1,2 +0,0 @@ -#define TRUE 1 -#define FALSE 0 diff --git a/util/ceg/ce_back/obj_back/Makefile b/util/ceg/ce_back/obj_back/Makefile deleted file mode 100644 index 67e94d2c2..000000000 --- a/util/ceg/ce_back/obj_back/Makefile +++ /dev/null @@ -1,107 +0,0 @@ -EM=../../../.. -CEG=$(EM)/lib/ceg -SOURCE=$(CEG)/ce_back/obj_back - -CC = cc -CFLAGS = -O - -IDIRS=-I.\ - -I..\ - -I$(EM)/h\ - -I$(EM)/modules/h - -LIBS=$(EM)/modules/lib/*.a - -all : data.o con2.o con4.o relocation.o end_back.o gen1.o gen2.o\ - gen4.o init_back.o output.o reloc1.o reloc2.o reloc4.o\ - rom2.o rom4.o set_global.o set_local.o switchseg.o symboldef.o text2.o\ - text4.o do_open.o do_close.o memory.o label.o misc.o extnd.o symtable.o\ - common.o - -data.o : data.h back.h header.h $(SOURCE)/data.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/data.c - -memory.o :data.h back.h header.h $(SOURCE)/memory.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/memory.c - -con2.o : data.h back.h header.h $(SOURCE)/con2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con2.c - -con4.o : data.h back.h header.h $(SOURCE)/con4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con4.c - -relocation.o : data.h back.h ../mach.h $(SOURCE)/relocation.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/relocation.c - -do_open.o : data.h back.h ../mach.h $(SOURCE)/do_open.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/do_open.c - -do_close.o : data.h back.h ../mach.h $(SOURCE)/do_close.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/do_close.c - -gen1.o : data.h back.h header.h $(SOURCE)/gen1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen1.c - -gen2.o : data.h back.h header.h $(SOURCE)/gen2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen2.c - -gen4.o : data.h back.h header.h $(SOURCE)/gen4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen4.c - -init_back.o : data.h back.h ../mach.h $(SOURCE)/init_back.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/init_back.c - -end_back.o : data.h back.h ../mach.h $(SOURCE)/end_back.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/end_back.c - -output.o : data.h back.h ../mach.h $(SOURCE)/output.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/output.c - -reloc1.o : data.h back.h header.h $(SOURCE)/reloc1.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc1.c - -reloc2.o : data.h back.h header.h $(SOURCE)/reloc2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc2.c - -reloc4.o : data.h back.h header.h $(SOURCE)/reloc4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc4.c - -rom2.o : data.h back.h header.h $(SOURCE)/rom2.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom2.c - -rom4.o : data.h back.h header.h $(SOURCE)/rom4.c - $(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom4.c - -set_global.o : data.h back.h ../mach.h $(SOURCE)/set_global.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/set_global.c - -set_local.o : data.h back.h ../mach.h $(SOURCE)/set_local.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/set_local.c - -switchseg.o : data.h back.h ../mach.h $(SOURCE)/switchseg.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/switchseg.c - -symboldef.o : data.h back.h ../mach.h $(SOURCE)/symboldef.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/symboldef.c - -text2.o : data.h back.h ../mach.h $(SOURCE)/text2.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/text2.c - -text4.o : data.h back.h ../mach.h $(SOURCE)/text4.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/text4.c - -symtable.o : data.h back.h ../mach.h $(SOURCE)/symtable.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/symtable.c - -extnd.o : data.h back.h ../mach.h $(SOURCE)/extnd.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/extnd.c - -misc.o : data.h back.h ../mach.h $(SOURCE)/misc.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/misc.c - -label.o : data.h back.h ../mach.h $(SOURCE)/label.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/label.c - -common.o : data.h back.h ../mach.h $(SOURCE)/common.c - $(CC) $(CFLAGS) -c $(IDIRS) -I.. $(SOURCE)/common.c - diff --git a/util/ceg/ce_back/obj_back/mysprint.c b/util/ceg/ce_back/obj_back/mysprint.c deleted file mode 100644 index 44281a661..000000000 --- a/util/ceg/ce_back/obj_back/mysprint.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include "data.h" -#include - -/* Mysprint() stores the string directly in the string_arae. This saves - * a copy action. It is assumed that the strings stored in the string-table - * are never longer than MAXSTRLEN bytes. - */ - -#define MAXSTRLEN 1024 - -/*VARARGS*/ -int mysprint(va_alist) - va_dcl -{ - char *fmt; - va_list args; - int retval; - - va_start(args); - fmt = va_arg(args, char *); - while (string + MAXSTRLEN - string_area > size_string) - mem_string(); - retval = _format(string, fmt, args); - string[retval] = '\0'; - va_end(args); - return retval; -} diff --git a/util/ceg/defaults/Makefile b/util/ceg/defaults/Makefile deleted file mode 100644 index bd5ba1436..000000000 --- a/util/ceg/defaults/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -EM = ../../.. -CEGLIB = $(EM)/lib/ceg -DEF = $(CEGLIB)/defaults -MessageList = C_cst.c C_dlb.c C_dnam.c C_fcon.c C_icon.c C_ilb.c C_mes_begin.c \ - C_mes_end.c C_pnam.c C_scon.c C_ucon.c -NotimplList = not_impl.c not_impl_table -PseudoList = C_busy.c C_close.c C_df_dlb.c C_df_dnam.c C_df_ilb.c C_end.c \ - C_end_narg.c C_exa_dlb.c C_exa_dnam.c C_exp.c C_ina_dlb.c \ - C_ina_dnam.c C_init.c C_inp.c C_magic.c C_open.c C_pro.c \ - C_pro_narg.c C_insertpart.c -StorageList = C_bss_cst.c C_bss_dlb.c C_bss_dnam.c C_bss_ilb.c C_bss_pnam.c \ - C_con_cst.c C_con_dlb.c C_con_dnam.c C_con_ilb.c C_con_pnam.c \ - C_con_scon.c C_hol_cst.c C_hol_dlb.c C_hol_dnam.c C_hol_ilb.c \ - C_hol_pnam.c C_rom_cst.c C_rom_dlb.c C_rom_dnam.c C_rom_ilb.c \ - C_rom_pnam.c C_rom_scon.c - -all: C_out.c - -clean: - rm -f C_out.c C_mnem C_mnem_narg - -install: all - -mkdir $(CEGLIB) - -mkdir $(DEF) - -mkdir $(DEF)/message - -mkdir $(DEF)/not_impl - -mkdir $(DEF)/pseudo - -mkdir $(DEF)/storage - cp pseudo_vars.c $(DEF) - cp EM_vars.c $(DEF) - for i in $(MessageList) ; do cp message/$$i $(DEF)/message/$$i ; done - for i in $(NotimplList) ; do cp not_impl/$$i $(DEF)/not_impl/$$i ; done - for i in $(PseudoList) ; do cp pseudo/$$i $(DEF)/pseudo/$$i ; done - for i in $(StorageList) ; do cp storage/$$i $(DEF)/storage/$$i ; done - cp C_out.c $(DEF)/C_out.c - -cmp: - -cmp pseudo_vars.c $(DEF)/pseudo_vars.c - -cmp EM_vars.c $(DEF)/EM_vars.c - -for i in $(MessageList) ; do cmp message/$$i $(DEF)/message/$$i ; done - -for i in $(NotimplList) ; do cmp not_impl/$$i $(DEF)/not_impl/$$i ; done - -for i in $(PseudoList) ; do cmp pseudo/$$i $(DEF)/pseudo/$$i ; done - -for i in $(StorageList) ; do cmp storage/$$i $(DEF)/storage/$$i ; done - -cmp C_out.c $(DEF)/C_out.c - -pr: - @for i in $(MessageList) ; do pr message/$$i ; done - @for i in $(NotimplList) ; do pr not_impl/$$i ; done - @for i in $(PseudoList) ; do pr pseudo/$$i ; done - @for i in $(StorageList) ; do pr storage/$$i ; done - -opr: - make pr | opr - -C_out.c: C_out_skel.c C_mnem C_mnem_narg mk_C_out - mk_C_out > C_out.c - -C_mnem: m_C_mnem argtype - sh m_C_mnem > C_mnem - -C_mnem_narg: m_C_mnem_na argtype - sh m_C_mnem_na > C_mnem_narg diff --git a/util/ceg/util/Makefile b/util/ceg/util/Makefile deleted file mode 100644 index e473f63de..000000000 --- a/util/ceg/util/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -EM = ../../.. -CEGLIB = $(EM)/lib/ceg -UTIL = $(CEGLIB)/util -UtilList = make_asobj make_own make_back make_ce make_ceg_as make_ceg_obj - -all: - -install: - -mkdir $(CEGLIB) - -mkdir $(UTIL) - cp $(UtilList) $(UTIL) - cp install_ceg update_ceg $(EM)/bin - -cmp: - for i in $(UtilList) ; do cmp $$i $(UTIL)/$$i ; done - -clean: - -pr: - @pr $(UtilList) - -opr: - make pr | opr diff --git a/util/ceg/util/create_ofiles b/util/ceg/util/create_ofiles deleted file mode 100644 index 4c8735b34..000000000 --- a/util/ceg/util/create_ofiles +++ /dev/null @@ -1,13 +0,0 @@ -list= -for i in *.c -do - b=`basename $i .c` - if test ! -f $b.o - then - >$b.o - list="$list $i" - fi -done -: my SUN is too fast ... -sleep 2 -touch $list diff --git a/util/ceg/util/make_as b/util/ceg/util/make_as deleted file mode 100644 index 37e488279..000000000 --- a/util/ceg/util/make_as +++ /dev/null @@ -1,68 +0,0 @@ -EM = ../../../.. -CEG = $(EM)/lib/ceg - -Em = $(CEG)/EM_parser/as_EM_pars -ASMAIN = $(CEG)/assemble/as_assemble -BACK = $(CEG)/ce_back -AS = $(CEG)/as_parser -DEF = $(CEG)/defaults - -CC = cc -AR = ar -LEXLIB = -ll - -IFILES = -I. -I.. -I$(AS) -I$(Em) -I$(EM)/h -I$(EM)/modules/h -I../back - -CFLAGS = -O $(IFILES) - -CEG_LIBS = $(EM)/modules/lib/liballoc.a\ - $(EM)/modules/lib/libprint.a\ - $(EM)/modules/lib/libstring.a\ - $(EM)/modules/lib/libsystem.a - -.c.o: mach.h back.a - cd ce ; $(CC) -c $(CFLAGS) ../$*.c ; cd .. - -all: back.a ce.a - -install: all - ../../install ce.a - ../../install back.a - -cmp: all - -../../compare ce.a - -../../compare back.a - -clean: - rm -rf ce back ceg ce.a back.a Out - -dclean: - rm -rf ce back ceg Out - -ce.a : ce/dummy - $(AR) r ce.a ce/*.o - -sh -c 'ranlib ce.a' - -ce/dummy : ce/dummy1 mach.h back.a - cd ce;$(CC) -c $(CFLAGS) *.c; touch dummy ; cd .. - -ce/dummy1: ceg/ceg EM_table mach.h back.a - -mkdir ce - -ln mach.c ce/mach.c - cd ce; ../ceg/ceg -l < $(DEF)/not_impl/not_impl_table ; cp $(DEF)/*.c . ; cp $(DEF)/*/*.c . ; cd .. - cd ce; $(EM)/lib/cpp -P ../EM_table | ../ceg/ceg -l ; cd .. - touch ce/dummy1 - -ceg/as_lib.a: - -mkdir ceg - cd ceg; cp $(ASMAIN)/* . ; $(CC) -c $(IFILES) *.c; $(AR) r as_lib.a *.o ; cd .. - -sh -c 'ranlib ceg/as_lib.a' - -back.a: mach.h - -mkdir back - cd back;cp $(BACK)/as_back/*h . ; cp $(BACK)/as_back/Makefile . ; make ; cd .. - $(AR) r back.a back/*o - -sh -c 'ranlib back.a' - -ceg/ceg : ceg/as_lib.a # $(Em)/em_parser - cd ceg; $(CC) -o ceg $(Em)/*.o as_lib.a $(CEG_LIBS) $(LEXLIB) ; cd .. diff --git a/util/ceg/util/make_ceg_as b/util/ceg/util/make_ceg_as deleted file mode 100644 index 60b50f774..000000000 --- a/util/ceg/util/make_ceg_as +++ /dev/null @@ -1,31 +0,0 @@ -EM = ../../../.. -CEG = $(EM)/lib/ceg - -Em = $(CEG)/EM_parser/as_EM_pars -ASMAIN = $(CEG)/assemble/as_assemble -AS = $(CEG)/as_parser -DEF = $(CEG)/defaults - -AR = ar -CC = cc -LEXLIB = -ll - -IFILES = -I. -I.. -I$(AS) -I$(Em) -I$(EM)/h -I$(EM)/modules/h -I../back - -CFLAGS = -O $(IFILES) - -CEG_LIBS = $(EM)/modules/lib/liballoc.a\ - $(EM)/modules/lib/libprint.a\ - $(EM)/modules/lib/libstring.a\ - $(EM)/modules/lib/libsystem.a - -all: ceg/ceg - -ceg/ceg: ceg/as_lib.a - cd ceg ; $(CC) -o ceg $(Em)/*.o as_lib.a $(CEG_LIBS) $(LEXLIB) ; cd .. - -ceg/as_lib.a: - -mkdir ceg - cd ceg ; cp $(CEG)/util/make_ceg_as Makefile ; cd .. - cd ceg ; cp $(ASMAIN)/* . ; $(CC) -c $(CFLAGS) *.c; $(AR) r as_lib.a *.o ; cd .. - -sh -c 'ranlib ceg/as_lib.a' diff --git a/util/ceg/util/make_ceg_obj b/util/ceg/util/make_ceg_obj deleted file mode 100644 index df1ac3945..000000000 --- a/util/ceg/util/make_ceg_obj +++ /dev/null @@ -1,44 +0,0 @@ -EM = ../../../.. -CEG = $(EM)/lib/ceg - -Em = $(CEG)/EM_parser/obj_EM_pars -ASMAIN = $(CEG)/assemble/obj_assemble -AS = $(CEG)/as_parser -EVAL = $(CEG)/as_parser/eval -DEF = $(CEG)/defaults - -AR = ar -CC = cc -LEXLIB = -ll - -IFILES = -I. -I.. -I$(AS) -I$(Em) -I$(EM)/h -I$(EM)/modules/h -I../back - -CFLAGS = -O $(IFILES) - -CEG_LIBS = $(EM)/modules/lib/liballoc.a\ - $(EM)/modules/lib/libprint.a\ - $(EM)/modules/lib/libstring.a\ - $(EM)/modules/lib/libsystem.a - -all: ceg/ceg - -ceg/ceg : ceg/as_lib.a ceg/as_instr.o ceg/eval_as.o - cd ceg ; $(CC) -o ceg $(Em)/*.o as_instr.o eval_as.o as_lib.a $(CEG_LIBS) $(LEXLIB) ; cd .. - -ceg/as_lib.a: - -mkdir ceg - cd ceg ; cp $(CEG)/util/make_ceg_obj Makefile ; cd .. - cd ceg ; cp $(ASMAIN)/* . ; $(CC) -c $(CFLAGS) *.c; $(AR) r as_lib.a *.o ; cd .. - -sh -c 'ranlib ceg/as_lib.a' - -ceg/eval_as.o : ceg/eval_as.c as.h # $(AS)/as_parser.h $(Em)/arg_type.h - cd ceg ; $(CC) -c $(CFLAGS) eval_as.c ; cd .. - -ceg/eval_as.c : as.c # $(EVAL)/eval - cd ceg ; $(EVAL)/eval < ../as.c > eval_as.c ; cd .. - -ceg/as_instr.o : as.h ceg/as_lib.a ceg/as_instr.c - cd ceg ; $(CC) -c $(CFLAGS) as_instr.c ; cd .. - -ceg/as_instr.c : as_table # $(AS)/as_parser - cd ceg ; $(EM)/lib/cpp -P ../as_table | $(AS)/as_parser > as_instr.c ; cd .. diff --git a/util/ceg/util/make_obj b/util/ceg/util/make_obj deleted file mode 100644 index b4709aa87..000000000 --- a/util/ceg/util/make_obj +++ /dev/null @@ -1,78 +0,0 @@ -EM = ../../../.. -CEG = $(EM)/lib/ceg - -Em = $(CEG)/EM_parser/obj_EM_pars -ASMAIN = $(CEG)/assemble/obj_assemble -BACK = $(CEG)/ce_back -AS = $(CEG)/as_parser -EVAL = $(CEG)/as_parser/eval -DEF = $(CEG)/defaults - -AR = ar -CC = cc -LEXLIB = -ll - -IFILES = -I. -I.. -I$(AS) -I$(Em) -I$(EM)/h -I$(EM)/modules/h -I../back - -CEG_LIBS = $(EM)/modules/lib/liballoc.a\ - $(EM)/modules/lib/libprint.a\ - $(EM)/modules/lib/libstring.a\ - $(EM)/modules/lib/libsystem.a - -CFLAGS = -O $(IFILES) - -.c.o: mach.h back.a - cd ce ; $(CC) -c $(CFLAGS) ../$*.c ; cd .. - -all: back.a ce.a - -install: all - ../../install ce.a - ../../install back.a - -cmp: all - -../../compare ce.a - -../../compare back.a - -clean: - rm -rf ce back ceg ce.a back.a Out - -ce.a : ce/dummy - $(AR) r ce.a ce/*.o - -sh -c 'ranlib ce.a' - -ce/dummy : ce/dummy1 mach.h back.a - cd ce;$(CC) -c $(CFLAGS) *.c; touch dummy ; cd .. - -ce/dummy1: ceg/ceg EM_table mach.h back.a - -mkdir ce - -ln mach.c ce/mach.c - cd ce; ../ceg/ceg -l < $(DEF)/not_impl/not_impl_table ; cp $(DEF)/*.c . ; cp $(DEF)/*/*.c . ; cd .. - cd ce; $(EM)/lib/cpp -P ../EM_table | ../ceg/ceg -l ; cd .. - touch ce/dummy1 - -back.a: mach.h - -mkdir back - cd back;cp $(BACK)/obj_back/*h . ; cp $(BACK)/obj_back/Makefile . ; make; cd .. - $(AR) r back.a back/*o; - -sh -c 'ranlib back.a' - -ceg/ceg : ceg/as_lib.a ceg/as_instr.o ceg/eval_as.o # $(Em)/em_parser - cd ceg; $(CC) -o ceg $(Em)/*.o as_instr.o eval_as.o as_lib.a $(CEG_LIBS) $(LEXLIB) ; cd .. - -ceg/as_lib.a: - -mkdir ceg - cd ceg; cp $(ASMAIN)/* . ; $(CC) -c $(IFILES) *.c; $(AR) r as_lib.a *.o ; touch dummy ; cd .. - -sh -c 'ranlib ceg/as_lib.a' - -ceg/eval_as.o : ceg/eval_as.c as.h # $(AS)/as_parser.h $(Em)/arg_type.h - cd ceg;$(CC) -c $(IFILES) eval_as.c ; cd .. - -ceg/eval_as.c : as.c # $(EVAL)/eval - cd ceg; $(EVAL)/eval < ../as.c > eval_as.c ; cd .. - -ceg/as_instr.o : as.h ceg/dummy ceg/as_instr.c - cd ceg;$(CC) -c $(IFILES) as_instr.c ; cd .. - -ceg/as_instr.c : as_table # $(AS)/as_parser - cd ceg; $(EM)/lib/cpp -P ../as_table| $(AS)/as_parser > as_instr.c ; cd .. diff --git a/util/ceg/util/preproc b/util/ceg/util/preproc deleted file mode 100644 index 28fb419da..000000000 --- a/util/ceg/util/preproc +++ /dev/null @@ -1 +0,0 @@ -../../../../lib/cpp $@ | sed "/^#/d" diff --git a/util/ceg/util/update b/util/ceg/util/update deleted file mode 100644 index 9cca367ee..000000000 --- a/util/ceg/util/update +++ /dev/null @@ -1,28 +0,0 @@ -make -f ce_makefile ceg/ceg - -for i -do - case $i in - ALL) make -f ce_makefile EM_instr ce.a; - exit 0;; - - *.o) make -f ce_makefile ce/$i; - ar r ce.a $i;; - - *..) ( cd ce; ../../../../lib/cpp ../EM_table| sed "/^#/d"| ../ceg/ceg -c $i); - F=`basename $i ..`; - U="_dnam" - V="_dlb" - make -f ce_makefile ce/$F.o ce/$F$U.o ce/"$F$V.o"; - echo ar r ce.a ce/$F.o ce/"$F$U.o" ce/"$F$V.o"; - ar r ce.a ce/$F.o ce/$F$U.o ce/"$F$U.o";; - - *) ( cd ce; ../../../../lib/cpp ../EM_table| sed "/^#/d"| ../ceg/ceg -c $i); - make -f ce_makefile ce/$i.o; - echo ar r ce.a ce/$i.o; - ar r ce.a ce/$i.o;; - esac -done - -echo ranlib ce.a -ranlib ce.a diff --git a/util/cgg/Makefile b/util/cgg/Makefile deleted file mode 100644 index d33c168c9..000000000 --- a/util/cgg/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -# $Header$ - -PREFLAGS=-I../../h -CFLAGS=$(PREFLAGS) -LDFLAGS= -LINTOPTS=-hbxac $(PREFLAGS) -LIBS=../../lib/em_data.a -# LEXLIB is system dependent, try -ll or -lln first -LEXLIB = -lln - -cgg: bootgram.o main.o bootlex.o - $(CC) $(LDFLAGS) bootgram.o main.o bootlex.o $(LIBS) $(LEXLIB) -o cgg - -bootgram.c: bootgram.y - @echo expect 1 shift/reduce conflict - yacc -d bootgram.y - mv y.tab.c bootgram.c - -install: cgg - cp cgg ../../lib/cgg - -cmp: cgg - cmp cgg ../../lib/cgg - -lint: bootgram.c main.c bootlex.c - lint $(LINTOPTS) bootgram.c main.c bootlex.c -clean: - rm -f *.o bootgram.c bootlex.c cgg y.tab.h -bootgram.o: booth.h -bootgram.o: ../../h/cg_pattern.h -bootlex.o: booth.h -bootlex.o: ../../h/cg_pattern.h -main.o: booth.h -main.o: ../../h/cg_pattern.h diff --git a/util/cmisc/Makefile b/util/cmisc/Makefile deleted file mode 100644 index 7a7894f3d..000000000 --- a/util/cmisc/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -EM = ../.. -EMBIN = $(EM)/bin -EMMAN = $(EM)/man -CFLAGS = -O -LDFLAGS = - -all: mkdep cid cclash prid tabgen - -install: all - rm -f $(EMBIN)/mkdep $(EMBIN)/cid $(EMBIN)/cclash $(EMBIN)/prid \ - $(EMBIN)/tabgen - cp mkdep cid cclash prid tabgen $(EMBIN) - rm -f $(EMMAN)/mkdep.1 $(EMMAN)/cid.1 $(EMMAN)/cclash.1 \ - $(EMMAN)/prid.1 $(EMMAN)/tabgen.1 - cp mkdep.1 cid.1 cclash.1 prid.1 tabgen.1 $(EMMAN) - -cmp: all - -cmp mkdep $(EMBIN)/mkdep - -cmp cid $(EMBIN)/cid - -cmp cclash $(EMBIN)/cclash - -cmp prid $(EMBIN)/prid - -cmp tabgen $(EMBIN)/tabgen - -cmp mkdep.1 $(EMMAN)/mkdep.1 - -cmp cid.1 $(EMMAN)/cid.1 - -cmp cclash.1 $(EMMAN)/cclash.1 - -cmp prid.1 $(EMMAN)/prid.1 - -cmp tabgen.1 $(EMMAN)/tabgen.1 - -clean: - rm -f *.o mkdep cid cclash prid tabgen - -pr: - @pr `pwd`/Makefile `pwd`/mkdep.c `pwd`/cclash.c `pwd`/cid.c \ - `pwd`/prid.c `pwd`/GCIPM.c `pwd`/tabgen.c - -opr: - make pr | opr - -mkdep: mkdep.o - $(CC) $(LDFLAGS) -o mkdep mkdep.o - -tabgen: tabgen.o - $(CC) $(LDFLAGS) -o tabgen tabgen.o - -cid: cid.o GCIPM.o - $(CC) $(LDFLAGS) -o cid cid.o GCIPM.o - -cclash: cclash.o GCIPM.o - $(CC) $(LDFLAGS) -o cclash cclash.o GCIPM.o - -prid: prid.o GCIPM.o - $(CC) $(LDFLAGS) -o prid prid.o GCIPM.o diff --git a/util/cpp/Version.c b/util/cpp/Version.c deleted file mode 100644 index 0a2ab69ac..000000000 --- a/util/cpp/Version.c +++ /dev/null @@ -1,8 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -#ifndef lint -static char Version[] = "ACK C preprocessor Version 1.3"; -#endif lint diff --git a/util/cpp/chtab.c b/util/cpp/chtab.c deleted file mode 100644 index 32e34997e..000000000 --- a/util/cpp/chtab.c +++ /dev/null @@ -1,321 +0,0 @@ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* - chtab - character table generator - - Author: Erik Baalbergen (..tjalk!erikb) - Modified by Ceriel Jacobs -*/ - -#include - -static char *RcsId = "$Header$"; - -#define MAXBUF 256 -#define TABSIZE 257 -#define COMCOM '-' -#define FILECOM '%' - -int InputForm = 'c'; -char OutputForm[MAXBUF] = "%s,\n"; -char *Table[TABSIZE]; -char *Name; -char *ProgCall; -int signedch = 0; -char *OutputName; -char *chroffsetfile = "charoffset.h"; - -main(argc, argv) - char *argv[]; -{ - char c = 0200; - int i = c; - - if (i < 0) signedch = 1; - - ProgCall = *argv++; - argc--; - while (argc-- > 0) { - if (**argv == COMCOM) { - option(*argv++); - } - else { - process(*argv++, InputForm); - } - } - MkCharIndex(); - exit(0); -} - -MkCharIndex() -{ - FILE *fp; - - if ((fp = fopen(chroffsetfile, "w")) == NULL) { - fprintf(stderr, "%s: cannot write file %s\n", ProgCall, chroffsetfile); - exit(1); - } - if (signedch) { - fputs("#define CharOffset 128\n", fp); - } - else fputs("#define CharOffset 0\n", fp); - fclose(fp); -} - -char * -Salloc(s) - char *s; -{ - char *malloc(); - char *ns = malloc(strlen(s) + 1); - - if (ns) { - strcpy(ns, s); - } - return ns; -} - -option(str) - char *str; -{ - /* note that *str indicates the source of the option: - either COMCOM (from command line) or FILECOM (from a file). - */ - switch (*++str) { - - case ' ': /* command */ - case '\t': - case '\0': - break; - case 'I': - InputForm = *++str; - break; - case 'f': - if (*++str == '\0') { - fprintf(stderr, "%s: -f: name expected\n", ProgCall); - exit(1); - } - DoFile(str); - break; - case 'F': - sprintf(OutputForm, "%s\n", ++str); - break; - case 'T': - printf("%s\n", ++str); - break; - case 'p': - PrintTable(); - break; - case 'C': - ClearTable(); - break; - case 'H': - if (*++str == '\0') { - fprintf(stderr, "%s: -H: name expected\n", ProgCall); - } - else chroffsetfile = ++str; - break; - default: - fprintf(stderr, "%s: bad option -%s\n", ProgCall, str); - } -} - -ClearTable() -{ - register i; - - for (i = 0; i < TABSIZE; i++) { - Table[i] = 0; - } -} - -PrintTable() -{ - register i; - - for (i = 0; i < TABSIZE; i++) { - if (Table[i]) { - printf(OutputForm, Table[i]); - } - else { - printf(OutputForm, "0"); - } - } -} - -process(str, format) - char *str; -{ - char *cstr = str; - char *Name = cstr; /* overwrite original string! */ - - /* strip of the entry name - */ - while (*str && *str != ':') { - if (*str == '\\') { - ++str; - } - *cstr++ = *str++; - } - - if (*str != ':') { - fprintf(stderr, "%s: bad specification: \"%s\", ignored\n", - ProgCall, Name); - return 0; - } - *cstr = '\0'; - str++; - - switch (format) { - - case 'c': - return c_proc(str, Name); - default: - fprintf(stderr, "%s: bad input format\n", ProgCall); - } - return 0; -} - -c_proc(str, Name) - char *str; - char *Name; -{ - int ch, ch2; - int quoted(); - char *name = Salloc(Name); - - while (*str) { - if (*str == '\\') { - ch = quoted(&str); - } - else { - ch = *str++; - } - if (*str == '-') { - if (*++str == '\\') { - ch2 = quoted(&str); - } - else { - if (ch2 = *str++); - else str--; - } - if (ch > ch2) { - fprintf(stderr, "%s: bad range\n", ProgCall); - return 0; - } -#define ind(X) (signedch?(X>=128?X-128:X+128):X) - while (ch <= ch2) { - Table[ind(ch)] = name; - ch++; - } - } - else { - if (ch >= 0 && ch <= 255) - Table[ind(ch)] = name; - } - } - Table[256] = Table[0]; - return 1; -} - -int -quoted(pstr) - char **pstr; -{ - register int ch; - register int i; - register char *str = *pstr; - - if ((*++str >= '0') && (*str <= '9')) { - ch = 0; - for (i = 0; i < 3; i++) { - ch = 8 * ch + (*str - '0'); - if (*++str < '0' || *str > '9') - break; - } - } - else { - switch (*str++) { - - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'b': - ch = '\b'; - break; - case 'r': - ch = '\r'; - break; - case 'f': - ch = '\f'; - break; - default : - ch = *str; - } - } - *pstr = str; - return ch & 0377; -} - -int -stoi(str) - char *str; -{ - register i = 0; - - while (*str >= '0' && *str <= '9') { - i = i * 10 + *str++ - '0'; - } - return i; -} - -char * -getline(s, n, fp) - char *s; - FILE *fp; -{ - register c = getc(fp); - char *str = s; - - while (n--) { - if (c == EOF) { - return NULL; - } - else - if (c == '\n') { - *str++ = '\0'; - return s; - } - *str++ = c; - c = getc(fp); - } - s[n - 1] = '\0'; - return s; -} - -#define BUFSIZE 1024 - -DoFile(name) - char *name; -{ - char text[BUFSIZE]; - FILE *fp; - - if ((fp = fopen(name, "r")) == NULL) { - fprintf(stderr, "%s: cannot read file %s\n", ProgCall, name); - exit(1); - } - while (getline(text, BUFSIZE, fp) != NULL) { - if (text[0] == FILECOM) { - option(text); - } - else { - process(text, InputForm); - } - } -} diff --git a/util/data/Makefile b/util/data/Makefile deleted file mode 100644 index 12a7dfb19..000000000 --- a/util/data/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -# $Header$ -d=../.. -h=$d/h -l=$d/lib -AR=ar -SUF=o -LIBSUF=a - -OBJ=em_mnem.$(SUF) em_pseu.$(SUF) em_flag.$(SUF) em_ptyp.$(SUF) - -DATA_PATH=em_data.$(LIBSUF) - -CFLAGS=-O -I$h $(COPT) - -.SUFFIXES: .$(SUF) -.c.$(SUF): - $(CC) -c $(CFLAGS) $*.c - -$(DATA_PATH): $(OBJ) - $(AR) rv $(DATA_PATH) $(OBJ) - -sh -c 'ranlib $(DATA_PATH)' - -em_flag.$(SUF): $h/em_flag.h - -em_ptyp.$(SUF): $h/em_flag.h $h/em_ptyp.h - -install : $(DATA_PATH) - -cmp -s $(DATA_PATH) $l/$(DATA_PATH) || { cp $(DATA_PATH) $l/$(DATA_PATH) ; sh -c 'ranlib $l/$(DATA_PATH)' ; } - -cmp : $(DATA_PATH) - -cmp $(DATA_PATH) $l/$(DATA_PATH) - -clean: - rm -f $(OBJ) $(DATA_PATH) *.old - -opr: - make pr ^ opr - -pr: - @pr Makefile em_mnem.c em_pseu.c em_flag.c em_ptyp.c diff --git a/util/ego/bo/Makefile b/util/ego/bo/Makefile deleted file mode 100644 index f037501ce..000000000 --- a/util/ego/bo/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -bo.c - -OFILES=\ -bo.o - -HFILES= - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o \ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/aux.o \ -$(SHR)/stack_chg.o $(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m \ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/aux.m \ -$(SHR)/stack_chg.m $(SHR)/go.m - -all: bo - -bo: $(OFILES) - $(CC) -o bo $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -bo_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o bo -.c $(LDFLAGS) bo.o $(EMLIB)/em_data.a - -install: all - ../install bo - -cmp: all - -../compare bo - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f bo *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -bo.o: ../share/alloc.h -bo.o: ../share/aux.h -bo.o: ../share/debug.h -bo.o: ../share/def.h -bo.o: ../share/files.h -bo.o: ../share/get.h -bo.o: ../share/global.h -bo.o: ../share/go.h -bo.o: ../share/lset.h -bo.o: ../share/map.h -bo.o: ../share/put.h -bo.o: ../share/types.h diff --git a/util/ego/ca/Makefile b/util/ego/ca/Makefile deleted file mode 100644 index d8cab7072..000000000 --- a/util/ego/ca/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -ca.c ca_put.c - -OFILES=\ -ca.o ca_put.o - -HFILES=\ -ca.h ca_put.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/aux.o $(SHR)/debug.o \ -$(SHR)/lset.o $(SHR)/cset.o $(SHR)/files.o $(SHR)/map.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/aux.m $(SHR)/debug.m \ -$(SHR)/lset.m $(SHR)/cset.m $(SHR)/files.m $(SHR)/map.m - -all: ca - -ca: $(OFILES) - $(CC) -o ca $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -ca_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o ca -.c $(LDFLAGS) ca.o $(EMLIB)/em_data.a - -install: all - ../install ca - -cmp: all - -../compare ca - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f ca *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -ca.o: ../share/alloc.h -ca.o: ../share/debug.h -ca.o: ../share/files.h -ca.o: ../share/get.h -ca.o: ../share/global.h -ca.o: ../share/lset.h -ca.o: ../share/map.h -ca.o: ../share/types.h -ca.o: ca.h -ca.o: ca_put.h -ca_put.o: ../share/alloc.h -ca_put.o: ../share/debug.h -ca_put.o: ../share/def.h -ca_put.o: ../share/map.h -ca_put.o: ../share/types.h -ca_put.o: ca.h diff --git a/util/ego/cf/Makefile b/util/ego/cf/Makefile deleted file mode 100644 index 4a6236b3c..000000000 --- a/util/ego/cf/Makefile +++ /dev/null @@ -1,102 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -cf.c cf_succ.c cf_idom.c cf_loop.c - -OFILES=\ -cf.o cf_idom.o cf_loop.o cf_succ.o - -HFILES=\ -cf.h cf_succ.h cf_idom.h cf_loop.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o \ -$(SHR)/debug.o $(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o \ -$(SHR)/cset.o $(SHR)/aux.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m \ -$(SHR)/debug.m $(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m \ -$(SHR)/cset.m $(SHR)/aux.m - -all: cf - -cf: $(OFILES) - $(CC) -o cf $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -cf_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o cf -.c $(LDFLAGS) cf.o $(EMLIB)/em_data.a - -install: all - ../install cf - -cmp: all - -../compare cf - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f cf *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -cf.o: ../share/alloc.h -cf.o: ../share/cset.h -cf.o: ../share/debug.h -cf.o: ../share/def.h -cf.o: ../share/files.h -cf.o: ../share/get.h -cf.o: ../share/global.h -cf.o: ../share/lset.h -cf.o: ../share/map.h -cf.o: ../share/put.h -cf.o: ../share/types.h -cf.o: cf.h -cf.o: cf_idom.h -cf.o: cf_loop.h -cf.o: cf_succ.h -cf_idom.o: ../share/alloc.h -cf_idom.o: ../share/debug.h -cf_idom.o: ../share/lset.h -cf_idom.o: ../share/types.h -cf_idom.o: cf.h -cf_loop.o: ../share/alloc.h -cf_loop.o: ../share/aux.h -cf_loop.o: ../share/debug.h -cf_loop.o: ../share/lset.h -cf_loop.o: ../share/types.h -cf_loop.o: cf.h -cf_succ.o: ../share/cset.h -cf_succ.o: ../share/debug.h -cf_succ.o: ../share/def.h -cf_succ.o: ../share/global.h -cf_succ.o: ../share/lset.h -cf_succ.o: ../share/map.h -cf_succ.o: ../share/types.h -cf_succ.o: cf.h diff --git a/util/ego/cj/Makefile b/util/ego/cj/Makefile deleted file mode 100644 index 30e5c0262..000000000 --- a/util/ego/cj/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -cj.c - -OFILES=\ -cj.o - -HFILES= - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o \ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/aux.o \ -$(SHR)/stack_chg.o $(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m \ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/aux.m $(SHR)/stack_chg.m $(SHR)/go.m - -all: cj - -cj: $(OFILES) - $(CC) -o \ - cj $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -cj_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o cj -.c $(LDFLAGS) cj.o $(EMLIB)/em_data.a - -install: all - ../install cj - -cmp: all - -../compare cj - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f cj *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -cj.o: ../share/alloc.h -cj.o: ../share/aux.h -cj.o: ../share/debug.h -cj.o: ../share/def.h -cj.o: ../share/files.h -cj.o: ../share/get.h -cj.o: ../share/global.h -cj.o: ../share/go.h -cj.o: ../share/lset.h -cj.o: ../share/map.h -cj.o: ../share/put.h -cj.o: ../share/stack_chg.h -cj.o: ../share/types.h diff --git a/util/ego/compare b/util/ego/compare deleted file mode 100755 index 774b47332..000000000 --- a/util/ego/compare +++ /dev/null @@ -1,6 +0,0 @@ -case $# in -1) DEST="$1" ;; -2) DEST="$2" ;; -*) echo $0 [source] destination ;; -esac -cmp "$1" ../../../lib/ego/$DEST diff --git a/util/ego/cs/Makefile b/util/ego/cs/Makefile deleted file mode 100644 index 523012e88..000000000 --- a/util/ego/cs/Makefile +++ /dev/null @@ -1,190 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -cs.c cs_alloc.c cs_aux.c cs_avail.c cs_debug.c cs_elim.c \ -cs_entity.c cs_kill.c cs_partit.c cs_profit.c cs_getent.c \ -cs_stack.c cs_vnm.c - -OFILES=\ -cs.o cs_alloc.o cs_aux.o cs_avail.o cs_debug.o cs_elim.o \ -cs_entity.o cs_kill.o cs_partit.o cs_profit.o cs_getent.o \ -cs_stack.o cs_vnm.o - -HFILES=\ -cs.h cs_alloc.h cs_aux.h cs_avail.h cs_debug.h cs_elim.h \ -cs_entity.h cs_kill.h cs_partit.h cs_profit.h cs_getent.h \ -cs_stack.h cs_vnm.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o\ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/aux.o\ -$(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m\ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/aux.m\ -$(SHR)/go.m - -all: cs - -cs: $(OFILES) - $(CC) -o cs $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -cs_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o cs -.c $(LDFLAGS) cs.o $(EMLIB)/em_data.a - -install: all - ../install cs - -cmp: all - -../compare cs - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f cs *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -cs.o: ../share/debug.h -cs.o: ../share/go.h -cs.o: ../share/lset.h -cs.o: ../share/types.h -cs.o: cs.h -cs.o: cs_aux.h -cs.o: cs_avail.h -cs.o: cs_debug.h -cs.o: cs_elim.h -cs.o: cs_entity.h -cs.o: cs_profit.h -cs.o: cs_stack.h -cs.o: cs_vnm.h -cs_alloc.o: ../share/alloc.h -cs_alloc.o: ../share/types.h -cs_alloc.o: cs.h -cs_aux.o: ../share/aux.h -cs_aux.o: ../share/debug.h -cs_aux.o: ../share/global.h -cs_aux.o: ../share/lset.h -cs_aux.o: ../share/types.h -cs_aux.o: cs.h -cs_aux.o: cs_entity.h -cs_avail.o: ../share/aux.h -cs_avail.o: ../share/debug.h -cs_avail.o: ../share/global.h -cs_avail.o: ../share/lset.h -cs_avail.o: ../share/types.h -cs_avail.o: cs.h -cs_avail.o: cs_alloc.h -cs_avail.o: cs_aux.h -cs_avail.o: cs_debug.h -cs_avail.o: cs_getent.h -cs_debug.o: ../share/debug.h -cs_debug.o: ../share/lset.h -cs_debug.o: ../share/types.h -cs_debug.o: cs.h -cs_debug.o: cs_aux.h -cs_debug.o: cs_avail.h -cs_debug.o: cs_entity.h -cs_elim.o: ../share/alloc.h -cs_elim.o: ../share/aux.h -cs_elim.o: ../share/debug.h -cs_elim.o: ../share/global.h -cs_elim.o: ../share/lset.h -cs_elim.o: ../share/types.h -cs_elim.o: cs.h -cs_elim.o: cs_alloc.h -cs_elim.o: cs_aux.h -cs_elim.o: cs_avail.h -cs_elim.o: cs_debug.h -cs_elim.o: cs_partit.h -cs_elim.o: cs_profit.h -cs_entity.o: ../share/debug.h -cs_entity.o: ../share/global.h -cs_entity.o: ../share/lset.h -cs_entity.o: ../share/types.h -cs_entity.o: cs.h -cs_entity.o: cs_alloc.h -cs_entity.o: cs_aux.h -cs_getent.o: ../share/aux.h -cs_getent.o: ../share/debug.h -cs_getent.o: ../share/global.h -cs_getent.o: ../share/types.h -cs_getent.o: cs.h -cs_getent.o: cs_aux.h -cs_getent.o: cs_entity.h -cs_getent.o: cs_stack.h -cs_kill.o: ../share/aux.h -cs_kill.o: ../share/cset.h -cs_kill.o: ../share/debug.h -cs_kill.o: ../share/global.h -cs_kill.o: ../share/lset.h -cs_kill.o: ../share/map.h -cs_kill.o: ../share/types.h -cs_kill.o: cs.h -cs_kill.o: cs_aux.h -cs_kill.o: cs_avail.h -cs_kill.o: cs_debug.h -cs_kill.o: cs_entity.h -cs_partit.o: ../share/aux.h -cs_partit.o: ../share/debug.h -cs_partit.o: ../share/global.h -cs_partit.o: ../share/types.h -cs_partit.o: cs.h -cs_partit.o: cs_stack.h -cs_profit.o: ../share/aux.h -cs_profit.o: ../share/cset.h -cs_profit.o: ../share/debug.h -cs_profit.o: ../share/global.h -cs_profit.o: ../share/lset.h -cs_profit.o: ../share/types.h -cs_profit.o: cs.h -cs_profit.o: cs_aux.h -cs_profit.o: cs_avail.h -cs_profit.o: cs_debug.h -cs_profit.o: cs_partit.h -cs_stack.o: ../share/aux.h -cs_stack.o: ../share/debug.h -cs_stack.o: ../share/global.h -cs_stack.o: ../share/types.h -cs_stack.o: cs.h -cs_stack.o: cs_aux.h -cs_vnm.o: ../share/aux.h -cs_vnm.o: ../share/debug.h -cs_vnm.o: ../share/global.h -cs_vnm.o: ../share/types.h -cs_vnm.o: cs.h -cs_vnm.o: cs_alloc.h -cs_vnm.o: cs_aux.h -cs_vnm.o: cs_avail.h -cs_vnm.o: cs_entity.h -cs_vnm.o: cs_getent.h -cs_vnm.o: cs_kill.h -cs_vnm.o: cs_partit.h -cs_vnm.o: cs_stack.h diff --git a/util/ego/descr/Makefile b/util/ego/descr/Makefile deleted file mode 100644 index ca4d3b6d6..000000000 --- a/util/ego/descr/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHARE=../share -CPP=$(EMLIB)/cpp - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -SOURCES = i86.descr m68k2.descr pdp.descr vax4.descr m68k4.descr m68020.descr \ - em22.descr em24.descr em44.descr - -TARGETS = i86descr m68k2descr vax4descr pdpdescr m68k4descr m68020descr \ - em22descr em24descr em44descr - -PRFILES = Makefile descr.sed $(SOURCES) - -all: $(TARGETS) - -install: all - for i in $(TARGETS) ; do ../install $$i ; done - -cmp: all - -for i in $(TARGETS) ; do ../compare $$i ; done - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f $(TARGETS) *.o Out out nohup.out - -i86descr: i86.descr descr.sed - $(CPP) -P -I$(EMH) i86.descr | sed -f descr.sed > i86descr - -pdpdescr: pdp.descr descr.sed - $(CPP) -P -I$(EMH) pdp.descr | sed -f descr.sed > pdpdescr - -m68k2descr: m68k2.descr descr.sed - $(CPP) -P -I$(EMH) m68k2.descr | sed -f descr.sed > m68k2descr - -m68k4descr: m68k4.descr descr.sed - $(CPP) -P -I$(EMH) m68k4.descr | sed -f descr.sed > m68k4descr - -m68020descr: m68020.descr descr.sed - $(CPP) -P -I$(EMH) m68020.descr | sed -f descr.sed > m68020descr - -vax4descr: vax4.descr descr.sed - $(CPP) -P -I$(EMH) vax4.descr | sed -f descr.sed > vax4descr - -em22descr: em22.descr descr.sed - $(CPP) -P -I$(EMH) em22.descr | sed -f descr.sed > em22descr - -em24descr: em24.descr descr.sed - $(CPP) -P -I$(EMH) em24.descr | sed -f descr.sed > em24descr - -em44descr: em44.descr descr.sed - $(CPP) -P -I$(EMH) em44.descr | sed -f descr.sed > em44descr - -sparcdescr: sparc.descr descr.sed - $(CPP) -P -I$(EMH) sparc.descr | sed -f descr.sed > sparcdescr - diff --git a/util/ego/descr/vax2.descr b/util/ego/descr/vax2.descr deleted file mode 100644 index 8dfc9ace3..000000000 --- a/util/ego/descr/vax2.descr +++ /dev/null @@ -1,117 +0,0 @@ -wordsize: 2 -pointersize: 4 -%%RA -general registers: 3 -address registers: 4 -floating point registers: 0 - -register score parameters: - local variable: - (2 cases) - pointer,pointer - (2 sizes) - fitbyte -> (5,2) - default -> (4,3) - general,general - (2 sizes) - fitbyte -> (3,1) - default -> (2,2) - address of local variable: - (2 cases) - pointer,pointer - (2 sizes) - fitbyte -> (0,1) - default -> (0,2) - general,pointer - (2 sizes) - fitbyte -> (0,1) - default -> (0,2) - constant: - (3 sizes) - in_0_63 -> (0,0) - fitbyte -> (0,1) - default -> (1,2) - double constant: - (1 size) - default -> (-1,-1) - address of global variable: - (1 size) - default -> (2,4) - address of procedure: - (1 size) - default -> (2,4) - -opening cost parameters: - local variable: - (2 cases) - pointer - (2 sizes) - fitbyte -> (10,4) - default -> (9,5) - general - (2 sizes) - fitbyte -> (8,4) - default -> (7,5) - address of local variable: - (2 cases) - pointer - (2 sizes) - fitbyte -> (0,4) - default -> (0,5) - general - (2 sizes) - fitbyte -> (0,4) - general -> (0,5) - constant: - (3 sizes) - in_0_63 -> (4,2) - fitbyte -> (5,3) - default -> (6,4) - double constant: - (1 size) - default -> (1000,1000) - address of global variable: - (1 size) - default -> (6,7) - address of procedure: - (1 size) - default -> (6,7) - -register save costs: - (9 cases) - 0 -> (0,0) - 1 -> (1,0) - 2 -> (2,0) - 3 -> (3,0) - 4 -> (4,0) - 5 -> (5,0) - 6 -> (6,0) - 7 -> (7,0) - 0 -> (0,0) -%%UD -access costs of global variables: - (1 size) - default -> (7,4) -access costs of local variables: - (2 sizes) - fitbyte -> (3,1) - default -> (2,2) -%%SR -overflow harmful?: no -array bound harmful?: no - -%%CS -#include "../../../h/em_mnem.h" -first time then space: -addressing modes: op_adp op_lof op_ldf op_loi op_dch op_lpb -1 - op_adp op_lof op_ldf op_loi op_dch op_lpb -1 -cheap operations: op_cii op_cui op_cfi op_ciu op_cff op_cuu op_cif - op_cmi op_cmf op_cmu op_cms op_cmp -1 - op_cii op_cui op_cfi op_ciu op_cff op_cuu op_cif - op_cmi op_cmf op_cmu op_cms op_cmp -1 -lexical tresholds: 1 1 -indirection limit: 8 -do sli if index?: no no -forbidden operators: -1 -1 -%%SP -global stack pollution allowed?: yes diff --git a/util/ego/em_ego/Makefile b/util/ego/em_ego/Makefile deleted file mode 100644 index e615b9be6..000000000 --- a/util/ego/em_ego/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -MODLIB=$(EMHOME)/modules/lib -MODH=$(EMHOME)/modules/h -SHARE=../share -MODS=$(MODLIB)/libprint.a $(MODLIB)/libstring.a $(MODLIB)/libsystem.a - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -I$(MODH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -all: em_ego - -em_ego: em_ego.o - $(CC) $(LDFLAGS) -o em_ego em_ego.o $(MODS) - -install: all - rm -f $(EMLIB)/em_ego - cp em_ego $(EMLIB)/em_ego - -cmp: all - -cmp em_ego $(EMLIB)/em_ego - -pr: - @pr em_ego.c - -opr: - make pr | opr - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) em_ego.c - -clean: - rm -f *.o em_ego diff --git a/util/ego/em_ego/em_ego b/util/ego/em_ego/em_ego deleted file mode 100755 index 32ac0abdb..000000000 --- a/util/ego/em_ego/em_ego +++ /dev/null @@ -1,91 +0,0 @@ -TMP=/usr/tmp/ego -DDUMP=$TMP.dd.$$ -PDUMP=$TMP.pd.$$ -PHASES='' -FLAGS='' -LEVEL=xxx -EM=$1 -KEEPTEMPS=no -shift - - -while : -do - case $# in - 0) break ;; - esac - A="$1" - shift - case $A in - *.m|*.ma) ICARG="$ICARG $A"; continue;; - -P) OPT="$1"; shift; continue;; - -IL) PHASES="$PHASES il cf caopt ic cf " ; continue;; - -CS) PHASES="$PHASES cs " ; continue;; - -SR) PHASES="$PHASES sr " ; continue;; - -UD) PHASES="$PHASES ud " ; continue;; - -LV) PHASES="$PHASES lv " ; continue;; - -RA) PHASES="$PHASES ra " ; continue;; - -SP) PHASES="$PHASES sp " ; continue;; - -BO) PHASES="$PHASES bo " ; continue;; - -CJ) PHASES="$PHASES cj " ; continue;; - -O*) LEVEL=$A ; continue;; - -t) KEEPTEMPS=yes ; continue;; - -*) FLAGS="$FLAGS $A"; continue;; - esac -done -if test "$PHASES" -then : -else - case $LEVEL in - -O2|-O|xxx)PHASES='cj bo sp ' ;; - -O3) PHASES='cs sr cj bo sp ud lv ra ' ;; - *) PHASES='il cf caopt ic cf cs sr cj bo sp ud lv ra ' ;; - esac -fi -TMPOPT=$TMP.o.$$ -PASSES="ic cf $PHASES ca" -OUTFILES="$PDUMP $DDUMP" -FILES="$OUTFILES $TMPOPT" -c=1 -if test "$ICARG" -then : -else -exit 0 -fi -for i in $PASSES -do INFILES=$OUTFILES - OUTFILES="$TMP.p.$c.$$ $TMP.d.$c.$$ $TMP.l.$c.$$ $TMP.b.$c.$$" - FILES="$FILES $OUTFILES" - if [ $KEEPTEMPS = no ] - then - trap "rm -f $FILES; exit 1" 0 1 2 15 - fi - case $i in - ic) $OPT/ic $INFILES - - $OUTFILES $ICARG || exit 1 - ;; - ca) $OPT/ca $INFILES $PDUMP $DDUMP - - || exit 1 - ;; - caopt) rm -f $TMPOPT - $OPT/ca $INFILES $PDUMP $DDUMP - - | $EM/lib/em_opt2 > $TMPOPT || exit 1 - ICARG=$TMPOPT - OUTFILES="$PDUMP $DDUMP" - if [ $KEEPTEMPS = no ] - then - rm -f $INFILES $PDUMP $DDUMP - fi - ;; - *) $OPT/$i $INFILES $OUTFILES $FLAGS || exit 1 - if [ $KEEPTEMPS = no ] - then - rm -f $INFILES - fi - ;; - esac - c=`expr $c + 1` -done -if [ $KEEPTEMPS = no ] -then - rm -f $FILES -fi -trap 0 -exit 0 diff --git a/util/ego/ic/Makefile b/util/ego/ic/Makefile deleted file mode 100644 index 15ad00e09..000000000 --- a/util/ego/ic/Makefile +++ /dev/null @@ -1,110 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -ic.c ic_aux.c ic_lib.c ic_lookup.c ic_io.c - -OFILES=\ -ic.o ic_aux.o ic_lookup.o ic_io.o ic_lib.o - -HFILES=\ -ic.h ic_aux.h ic_lib.h ic_lookup.h ic_io.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o \ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/aux.o - -SHARE_MFILES=\ -$(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m \ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/aux.m - -all: ic - -ic: $(OFILES) - $(CC) -o ic $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -ic_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o ic -.c $(LDFLAGS) ic.o $(EMLIB)/em_data.a - -install: all - ../install ic - -cmp: all - -../compare ic - -clean: - rm -f *.o ic Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -ic.o: ../share/alloc.h -ic.o: ../share/aux.h -ic.o: ../share/debug.h -ic.o: ../share/def.h -ic.o: ../share/files.h -ic.o: ../share/global.h -ic.o: ../share/map.h -ic.o: ../share/put.h -ic.o: ../share/types.h -ic.o: ic.h -ic.o: ic_aux.h -ic.o: ic_io.h -ic.o: ic_lib.h -ic.o: ic_lookup.h -ic_aux.o: ../share/alloc.h -ic_aux.o: ../share/aux.h -ic_aux.o: ../share/debug.h -ic_aux.o: ../share/def.h -ic_aux.o: ../share/global.h -ic_aux.o: ../share/types.h -ic_aux.o: ic.h -ic_aux.o: ic_aux.h -ic_aux.o: ic_io.h -ic_aux.o: ic_lookup.h -ic_io.o: ../share/alloc.h -ic_io.o: ../share/debug.h -ic_io.o: ../share/types.h -ic_io.o: ic.h -ic_io.o: ic_io.h -ic_io.o: ic_lookup.h -ic_lib.o: ../share/debug.h -ic_lib.o: ../share/files.h -ic_lib.o: ../share/global.h -ic_lib.o: ../share/types.h -ic_lib.o: ic.h -ic_lib.o: ic_io.h -ic_lib.o: ic_lib.h -ic_lib.o: ic_lookup.h -ic_lookup.o: ../share/alloc.h -ic_lookup.o: ../share/debug.h -ic_lookup.o: ../share/map.h -ic_lookup.o: ../share/types.h -ic_lookup.o: ic.h -ic_lookup.o: ic_lookup.h diff --git a/util/ego/il/Makefile b/util/ego/il/Makefile deleted file mode 100644 index 20ee2aa57..000000000 --- a/util/ego/il/Makefile +++ /dev/null @@ -1,175 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -il.c il1_anal.c il1_cal.c il1_formal.c il1_aux.c il2_aux.c \ -il3_subst.c il3_change.c il3_aux.c il_aux.c - -OFILES=\ -il.o il1_anal.o il1_cal.o il1_formal.o il1_aux.o il2_aux.o \ -il3_change.o il3_subst.o il3_aux.o il_aux.o - -HFILES=\ -il.h il1_anal.h il1_cal.h il1_formal.h il1_aux.h il2_aux.h \ -il3_subst.h il3_change.h il3_aux.h il_aux.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o \ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/parser.o \ -$(SHR)/aux.o $(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m \ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/parser.m \ -$(SHR)/aux.m $(SHR)/go.m - -all: il - -il: $(OFILES) - $(CC) -o il $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -il_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o il -.c $(LDFLAGS) il.o $(EMLIB)/em_data.a - -install: all - ../install il - -cmp: all - -../compare il - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f il *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -il.o: ../share/alloc.h -il.o: ../share/debug.h -il.o: ../share/files.h -il.o: ../share/get.h -il.o: ../share/global.h -il.o: ../share/go.h -il.o: ../share/lset.h -il.o: ../share/map.h -il.o: ../share/put.h -il.o: ../share/types.h -il.o: il.h -il.o: il1_anal.h -il.o: il2_aux.h -il.o: il3_subst.h -il.o: il_aux.h -il1_anal.o: ../share/alloc.h -il1_anal.o: ../share/aux.h -il1_anal.o: ../share/debug.h -il1_anal.o: ../share/global.h -il1_anal.o: ../share/lset.h -il1_anal.o: ../share/put.h -il1_anal.o: ../share/types.h -il1_anal.o: il.h -il1_anal.o: il1_anal.h -il1_anal.o: il1_aux.h -il1_anal.o: il1_cal.h -il1_anal.o: il1_formal.h -il1_anal.o: il_aux.h -il1_aux.o: ../share/alloc.h -il1_aux.o: ../share/debug.h -il1_aux.o: ../share/global.h -il1_aux.o: ../share/lset.h -il1_aux.o: ../share/types.h -il1_aux.o: il.h -il1_aux.o: il1_aux.h -il1_aux.o: il_aux.h -il1_cal.o: ../share/alloc.h -il1_cal.o: ../share/debug.h -il1_cal.o: ../share/global.h -il1_cal.o: ../share/lset.h -il1_cal.o: ../share/parser.h -il1_cal.o: ../share/types.h -il1_cal.o: il.h -il1_cal.o: il1_aux.h -il1_cal.o: il1_cal.h -il1_formal.o: ../share/alloc.h -il1_formal.o: ../share/debug.h -il1_formal.o: ../share/global.h -il1_formal.o: ../share/lset.h -il1_formal.o: ../share/types.h -il1_formal.o: il.h -il1_formal.o: il1_aux.h -il1_formal.o: il1_formal.h -il2_aux.o: ../share/alloc.h -il2_aux.o: ../share/aux.h -il2_aux.o: ../share/debug.h -il2_aux.o: ../share/get.h -il2_aux.o: ../share/global.h -il2_aux.o: ../share/lset.h -il2_aux.o: ../share/types.h -il2_aux.o: il.h -il2_aux.o: il2_aux.h -il2_aux.o: il_aux.h -il3_aux.o: ../share/alloc.h -il3_aux.o: ../share/debug.h -il3_aux.o: ../share/global.h -il3_aux.o: ../share/types.h -il3_aux.o: il.h -il3_aux.o: il3_aux.h -il3_aux.o: il_aux.h -il3_change.o: ../share/alloc.h -il3_change.o: ../share/aux.h -il3_change.o: ../share/debug.h -il3_change.o: ../share/def.h -il3_change.o: ../share/get.h -il3_change.o: ../share/global.h -il3_change.o: ../share/lset.h -il3_change.o: ../share/put.h -il3_change.o: ../share/types.h -il3_change.o: il.h -il3_change.o: il3_aux.h -il3_change.o: il3_change.h -il3_change.o: il_aux.h -il3_subst.o: ../share/alloc.h -il3_subst.o: ../share/debug.h -il3_subst.o: ../share/get.h -il3_subst.o: ../share/global.h -il3_subst.o: ../share/lset.h -il3_subst.o: ../share/types.h -il3_subst.o: il.h -il3_subst.o: il3_aux.h -il3_subst.o: il3_change.h -il3_subst.o: il3_subst.h -il3_subst.o: il_aux.h -il_aux.o: ../share/alloc.h -il_aux.o: ../share/debug.h -il_aux.o: ../share/get.h -il_aux.o: ../share/global.h -il_aux.o: ../share/lset.h -il_aux.o: ../share/map.h -il_aux.o: ../share/put.h -il_aux.o: ../share/types.h -il_aux.o: il.h -il_aux.o: il_aux.h diff --git a/util/ego/install b/util/ego/install deleted file mode 100755 index 02ced829d..000000000 --- a/util/ego/install +++ /dev/null @@ -1,16 +0,0 @@ -case $# in -1) DEST="$1" ;; -2) DEST="$2" ;; -*) echo $0 [source] destination ;; -esac -mkdir ../../../lib/ego > /dev/null 2>&1 -if cp "$1" ../../../lib/ego/$DEST >/dev/null 2>&1 || - { rm -f ../../../lib/ego/$DEST >/dev/null 2>&1 && - cp "$1" ../../../lib/ego/$DEST >/dev/null 2>&1 - } -then - exit 0 -else - echo Sorry, can not create "lib/ego/$DEST". - exit 1 -fi diff --git a/util/ego/lv/Makefile b/util/ego/lv/Makefile deleted file mode 100644 index 5777404a8..000000000 --- a/util/ego/lv/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -lv.c - -OFILES=\ -lv.o - -HFILES=\ -lv.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/aux.o $(SHR)/put.o $(SHR)/map.o $(SHR)/alloc.o \ -$(SHR)/global.o $(SHR)/debug.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/parser.o \ -$(SHR)/files.o $(SHR)/locals.o $(SHR)/init_glob.o $(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/aux.m $(SHR)/put.m $(SHR)/map.m $(SHR)/alloc.m \ -$(SHR)/global.m $(SHR)/debug.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/parser.m \ -$(SHR)/files.m $(SHR)/locals.m $(SHR)/init_glob.m $(SHR)/go.m - -all: lv - -lv: $(OFILES) - $(CC) -o lv $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -lv_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o lv -.c $(LDFLAGS) lv.o $(EMLIB)/em_data.a - -install: all - ../install lv - -cmp: all - -../compare lv - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f lv *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -lv.o: ../share/alloc.h -lv.o: ../share/aux.h -lv.o: ../share/cset.h -lv.o: ../share/debug.h -lv.o: ../share/def.h -lv.o: ../share/files.h -lv.o: ../share/get.h -lv.o: ../share/global.h -lv.o: ../share/go.h -lv.o: ../share/init_glob.h -lv.o: ../share/locals.h -lv.o: ../share/lset.h -lv.o: ../share/map.h -lv.o: ../share/parser.h -lv.o: ../share/put.h -lv.o: ../share/types.h -lv.o: lv.h diff --git a/util/ego/ra/Makefile b/util/ego/ra/Makefile deleted file mode 100644 index 43443ad03..000000000 --- a/util/ego/ra/Makefile +++ /dev/null @@ -1,173 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -ra.c ra_items.c ra_lifet.c ra_allocl.c ra_profits.c \ -ra_interv.c ra_pack.c ra_xform.c ra_aux.c - -OFILES=\ -ra.o ra_items.o ra_lifet.o ra_allocl.o ra_profits.o \ -ra_interv.o ra_pack.o ra_xform.o ra_aux.o - -HFILES=\ -ra.h ra_items.h ra_lifet.h ra_allocl.h ra_profits.h \ -ra_interv.h ra_pack.h ra_xform.h ra_aux.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/aux.o $(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o \ -$(SHR)/debug.o $(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o \ -$(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/aux.m $(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m \ -$(SHR)/debug.m $(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m \ -$(SHR)/go.m - -all: ra - -ra: $(OFILES) - $(CC) -o ra $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -ra_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o ra -.c $(LDFLAGS) ra.o $(EMLIB)/em_data.a - -itemtab.h: itemtab.src makeitems $(EMH)/em_mnem.h - makeitems $(EMH)/em_mnem.h itemtab.src > itemtab.h - -makeitems: makeitems.c - $(CC) -o makeitems makeitems.c - -install: all - ../install ra - -cmp: all - -../compare ra - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f ra makeitems itemtab.h *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -ra.o: ../share/alloc.h -ra.o: ../share/debug.h -ra.o: ../share/files.h -ra.o: ../share/get.h -ra.o: ../share/global.h -ra.o: ../share/go.h -ra.o: ../share/lset.h -ra.o: ../share/map.h -ra.o: ../share/put.h -ra.o: ../share/types.h -ra.o: ra.h -ra.o: ra_allocl.h -ra.o: ra_items.h -ra.o: ra_pack.h -ra.o: ra_profits.h -ra.o: ra_xform.h -ra_allocl.o: ../share/alloc.h -ra_allocl.o: ../share/aux.h -ra_allocl.o: ../share/cset.h -ra_allocl.o: ../share/debug.h -ra_allocl.o: ../share/def.h -ra_allocl.o: ../share/global.h -ra_allocl.o: ../share/lset.h -ra_allocl.o: ../share/map.h -ra_allocl.o: ../share/types.h -ra_allocl.o: ra.h -ra_allocl.o: ra_allocl.h -ra_allocl.o: ra_aux.h -ra_allocl.o: ra_interv.h -ra_allocl.o: ra_items.h -ra_aux.o: ../share/alloc.h -ra_aux.o: ../share/debug.h -ra_aux.o: ../share/def.h -ra_aux.o: ../share/global.h -ra_aux.o: ../share/lset.h -ra_aux.o: ../share/types.h -ra_aux.o: ra.h -ra_aux.o: ra_aux.h -ra_interv.o: ../share/alloc.h -ra_interv.o: ../share/debug.h -ra_interv.o: ../share/global.h -ra_interv.o: ../share/lset.h -ra_interv.o: ../share/types.h -ra_interv.o: ra.h -ra_interv.o: ra_interv.h -ra_items.o: ../share/alloc.h -ra_items.o: ../share/aux.h -ra_items.o: ../share/debug.h -ra_items.o: ../share/def.h -ra_items.o: ../share/global.h -ra_items.o: ../share/lset.h -ra_items.o: ../share/types.h -ra_items.o: itemtab.h -ra_items.o: ra.h -ra_items.o: ra_aux.h -ra_items.o: ra_items.h -ra_lifet.o: ../share/alloc.h -ra_lifet.o: ../share/aux.h -ra_lifet.o: ../share/debug.h -ra_lifet.o: ../share/def.h -ra_lifet.o: ../share/global.h -ra_lifet.o: ../share/lset.h -ra_lifet.o: ../share/types.h -ra_lifet.o: ra.h -ra_lifet.o: ra_aux.h -ra_lifet.o: ra_items.h -ra_lifet.o: ra_lifet.h -ra_pack.o: ../share/alloc.h -ra_pack.o: ../share/aux.h -ra_pack.o: ../share/cset.h -ra_pack.o: ../share/debug.h -ra_pack.o: ../share/def.h -ra_pack.o: ../share/global.h -ra_pack.o: ../share/lset.h -ra_pack.o: ../share/types.h -ra_pack.o: ra.h -ra_pack.o: ra_aux.h -ra_pack.o: ra_interv.h -ra_profits.o: ../share/debug.h -ra_profits.o: ../share/global.h -ra_profits.o: ../share/lset.h -ra_profits.o: ../share/types.h -ra_profits.o: ra.h -ra_profits.o: ra_aux.h -ra_profits.o: ra_profits.h -ra_xform.o: ../share/alloc.h -ra_xform.o: ../share/aux.h -ra_xform.o: ../share/debug.h -ra_xform.o: ../share/def.h -ra_xform.o: ../share/global.h -ra_xform.o: ../share/lset.h -ra_xform.o: ../share/types.h -ra_xform.o: ra.h -ra_xform.o: ra_interv.h -ra_xform.o: ra_items.h -ra_xform.o: ra_xform.h diff --git a/util/ego/share/makedepend b/util/ego/share/makedepend deleted file mode 100755 index 733f55b6f..000000000 --- a/util/ego/share/makedepend +++ /dev/null @@ -1,11 +0,0 @@ -for file in *.c -do ofile=`basename $file .c`.o - grep '^# *include.*"' $file|sed "s/.*\"\(.*\)\".*/$ofile: \1/" -done | sort -u >depend -ed - Makefile <<'!' -/AUTOAUTOAUTO/+,$d -$r depend -w -q -! -rm depend diff --git a/util/ego/share/makewlen.c b/util/ego/share/makewlen.c deleted file mode 100644 index 61ae10901..000000000 --- a/util/ego/share/makewlen.c +++ /dev/null @@ -1,10 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -main() -{ - printf("#define WORDLENGTH %d\n",sizeof(int) * 8); - exit(0); -} diff --git a/util/ego/sp/Makefile b/util/ego/sp/Makefile deleted file mode 100644 index d6bb4a507..000000000 --- a/util/ego/sp/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -sp.c - -OFILES=\ -sp.o - -HFILES= - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o \ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/aux.o \ -$(SHR)/stack_chg.o $(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m \ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/aux.m \ -$(SHR)/stack_chg.m $(SHR)/go.m - -all: sp - -sp: $(OFILES) - $(CC) -o sp $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -sp_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o sp -.c $(LDFLAGS) sp.o $(EMLIB)/em_data.a - -install: all - ../install sp - -cmp: all - -../compare sp - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f sp *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -sp.o: ../share/alloc.h -sp.o: ../share/aux.h -sp.o: ../share/debug.h -sp.o: ../share/files.h -sp.o: ../share/get.h -sp.o: ../share/global.h -sp.o: ../share/go.h -sp.o: ../share/lset.h -sp.o: ../share/map.h -sp.o: ../share/put.h -sp.o: ../share/stack_chg.h -sp.o: ../share/types.h diff --git a/util/ego/sr/Makefile b/util/ego/sr/Makefile deleted file mode 100644 index 5d1d62ebe..000000000 --- a/util/ego/sr/Makefile +++ /dev/null @@ -1,142 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -sr.c sr_iv.c sr_reduce.c sr_cand.c sr_xform.c sr_expr.c sr_aux.c - -OFILES=\ -sr.o sr_expr.o sr_reduce.o sr_iv.o sr_cand.o sr_xform.o sr_aux.o - -HFILES=\ -sr.h sr_iv.h sr_reduce.h sr_cand.h sr_xform.h sr_expr.h sr_aux.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/alloc.o $(SHR)/global.o $(SHR)/debug.o \ -$(SHR)/files.o $(SHR)/map.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/aux.o \ -$(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/alloc.m $(SHR)/global.m $(SHR)/debug.m \ -$(SHR)/files.m $(SHR)/map.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/aux.m \ -$(SHR)/go.m - -all: sr - -sr: $(OFILES) - $(CC) -o sr $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -sr_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o sr -.c $(LDFLAGS) sr.o $(EMLIB)/em_data.a - -install: all - ../install sr - -cmp: all - -../compare sr - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f sr *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -sr.o: ../share/alloc.h -sr.o: ../share/aux.h -sr.o: ../share/debug.h -sr.o: ../share/files.h -sr.o: ../share/get.h -sr.o: ../share/global.h -sr.o: ../share/go.h -sr.o: ../share/lset.h -sr.o: ../share/map.h -sr.o: ../share/put.h -sr.o: ../share/types.h -sr.o: sr.h -sr.o: sr_aux.h -sr.o: sr_iv.h -sr_aux.o: ../share/aux.h -sr_aux.o: ../share/debug.h -sr_aux.o: ../share/global.h -sr_aux.o: ../share/lset.h -sr_aux.o: ../share/types.h -sr_aux.o: sr.h -sr_aux.o: sr_aux.h -sr_aux.o: sr_xform.h -sr_cand.o: ../share/aux.h -sr_cand.o: ../share/cset.h -sr_cand.o: ../share/debug.h -sr_cand.o: ../share/global.h -sr_cand.o: ../share/lset.h -sr_cand.o: ../share/map.h -sr_cand.o: ../share/types.h -sr_cand.o: sr.h -sr_cand.o: sr_aux.h -sr_cand.o: sr_cand.h -sr_expr.o: ../share/aux.h -sr_expr.o: ../share/debug.h -sr_expr.o: ../share/global.h -sr_expr.o: ../share/lset.h -sr_expr.o: ../share/types.h -sr_expr.o: sr.h -sr_expr.o: sr_aux.h -sr_expr.o: sr_iv.h -sr_iv.o: ../share/alloc.h -sr_iv.o: ../share/aux.h -sr_iv.o: ../share/cset.h -sr_iv.o: ../share/debug.h -sr_iv.o: ../share/global.h -sr_iv.o: ../share/lset.h -sr_iv.o: ../share/types.h -sr_iv.o: sr.h -sr_iv.o: sr_aux.h -sr_iv.o: sr_cand.h -sr_iv.o: sr_iv.h -sr_reduce.o: ../share/alloc.h -sr_reduce.o: ../share/aux.h -sr_reduce.o: ../share/debug.h -sr_reduce.o: ../share/def.h -sr_reduce.o: ../share/global.h -sr_reduce.o: ../share/lset.h -sr_reduce.o: ../share/types.h -sr_reduce.o: sr.h -sr_reduce.o: sr_aux.h -sr_reduce.o: sr_expr.h -sr_reduce.o: sr_reduce.h -sr_reduce.o: sr_xform.h -sr_xform.o: ../share/alloc.h -sr_xform.o: ../share/aux.h -sr_xform.o: ../share/debug.h -sr_xform.o: ../share/def.h -sr_xform.o: ../share/get.h -sr_xform.o: ../share/global.h -sr_xform.o: ../share/lset.h -sr_xform.o: ../share/types.h -sr_xform.o: sr.h -sr_xform.o: sr_aux.h -sr_xform.o: sr_xform.h diff --git a/util/ego/ud/Makefile b/util/ego/ud/Makefile deleted file mode 100644 index bcfc380b1..000000000 --- a/util/ego/ud/Makefile +++ /dev/null @@ -1,136 +0,0 @@ -EMHOME=../../.. -EMH=$(EMHOME)/h -EMLIB=$(EMHOME)/lib -SHR=../share - -LDFLAGS= -CPPFLAGS=-DVERBOSE -DNOTCOMPACT -I$(EMH) -CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbu - -CFILES=\ -ud.c ud_defs.c ud_const.c ud_copy.c ud_aux.c - -OFILES=\ -ud.o ud_const.o ud_copy.o ud_aux.o ud_defs.o - -HFILES=\ -ud.h ud_defs.h ud_const.h ud_copy.h ud_aux.h - -PRFILES=\ -$(CFILES) $(HFILES) Makefile - -SHARE_OFILES=\ -$(SHR)/get.o $(SHR)/put.o $(SHR)/map.o $(SHR)/alloc.o $(SHR)/global.o \ -$(SHR)/debug.o $(SHR)/lset.o $(SHR)/cset.o $(SHR)/files.o $(SHR)/aux.o \ -$(SHR)/locals.o $(SHR)/init_glob.o $(SHR)/go.o - -SHARE_MFILES=\ -$(SHR)/get.m $(SHR)/put.m $(SHR)/map.m $(SHR)/alloc.m $(SHR)/global.m \ -$(SHR)/debug.m $(SHR)/lset.m $(SHR)/cset.m $(SHR)/files.m $(SHR)/aux.m \ -$(SHR)/locals.m $(SHR)/init_glob.m $(SHR)/go.m - -all: ud - -ud: $(OFILES) - $(CC) -o ud $(LDFLAGS) $(OFILES) $(SHARE_OFILES) $(EMLIB)/em_data.a - -ud_ack: $(CFILES) $(SHARE_MFILES) - $(CC) -c.o $(CFLAGS) $(CFILES) $(SHARE_MFILES) - $(CC) -o ud -.c $(LDFLAGS) ud.o $(EMLIB)/em_data.a - -install: all - ../install ud - -cmp: all - -../compare ud - -pr: - @pr $(PRFILES) - -opr: - make pr | opr - -clean: - rm -f ud *.o Out out nohup.out - -lint: - lint $(LINTFLAGS) $(CPPFLAGS) $(CFILES) - -print: $(PRFILES) - @pr $? - @touch print - -depend: - $(SHR)/makedepend - -# the next lines are generated automatically -# AUTOAUTOAUTOAUTOAUTOAUTO -ud.o: ../share/alloc.h -ud.o: ../share/aux.h -ud.o: ../share/cset.h -ud.o: ../share/debug.h -ud.o: ../share/def.h -ud.o: ../share/files.h -ud.o: ../share/get.h -ud.o: ../share/global.h -ud.o: ../share/go.h -ud.o: ../share/init_glob.h -ud.o: ../share/locals.h -ud.o: ../share/lset.h -ud.o: ../share/map.h -ud.o: ../share/put.h -ud.o: ../share/types.h -ud.o: ud.h -ud.o: ud_const.h -ud.o: ud_copy.h -ud.o: ud_defs.h -ud_aux.o: ../share/alloc.h -ud_aux.o: ../share/aux.h -ud_aux.o: ../share/cset.h -ud_aux.o: ../share/debug.h -ud_aux.o: ../share/def.h -ud_aux.o: ../share/global.h -ud_aux.o: ../share/locals.h -ud_aux.o: ../share/lset.h -ud_aux.o: ../share/types.h -ud_aux.o: ud.h -ud_aux.o: ud_defs.h -ud_const.o: ../share/alloc.h -ud_const.o: ../share/aux.h -ud_const.o: ../share/cset.h -ud_const.o: ../share/debug.h -ud_const.o: ../share/def.h -ud_const.o: ../share/global.h -ud_const.o: ../share/locals.h -ud_const.o: ../share/lset.h -ud_const.o: ../share/types.h -ud_const.o: ud.h -ud_const.o: ud_aux.h -ud_const.o: ud_const.h -ud_const.o: ud_defs.h -ud_copy.o: ../share/alloc.h -ud_copy.o: ../share/aux.h -ud_copy.o: ../share/cset.h -ud_copy.o: ../share/debug.h -ud_copy.o: ../share/def.h -ud_copy.o: ../share/global.h -ud_copy.o: ../share/locals.h -ud_copy.o: ../share/lset.h -ud_copy.o: ../share/types.h -ud_copy.o: ../ud/ud_defs.h -ud_copy.o: ud.h -ud_copy.o: ud_aux.h -ud_copy.o: ud_const.h -ud_copy.o: ud_copy.h -ud_defs.o: ../share/alloc.h -ud_defs.o: ../share/aux.h -ud_defs.o: ../share/cset.h -ud_defs.o: ../share/debug.h -ud_defs.o: ../share/global.h -ud_defs.o: ../share/locals.h -ud_defs.o: ../share/lset.h -ud_defs.o: ../share/map.h -ud_defs.o: ../share/types.h -ud_defs.o: ud.h -ud_defs.o: ud_defs.h diff --git a/util/ego/ud/ud_locals.h b/util/ego/ud/ud_locals.h deleted file mode 100644 index c6bfbdd86..000000000 --- a/util/ego/ud/ud_locals.h +++ /dev/null @@ -1,23 +0,0 @@ -/* $Header$ */ -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - */ -/* U S E - D E F I N I T I O N A N A L Y S I S - * - * U D _ L O C A L S . H - */ - -extern local_p *locals; /* table of locals, index is local-number */ -extern short nrlocals; /* number of locals for which we keep ud-info */ - -extern make_localtab(); /* (proc_p p) - * Analyse the text of procedure p to determine - * which local variable p has. Make a table of - * these variables ('locals') and count them - * ('nrlocals'). Also collect register messages. - */ -extern var_nr(); /* (line_p l; short *nr_out;bool *found_out) - * Compute the 'variable number' of the - * variable referenced by EM instruction l. - */ diff --git a/util/flex/makefile b/util/flex/makefile deleted file mode 100644 index ba2a2ea52..000000000 --- a/util/flex/makefile +++ /dev/null @@ -1,158 +0,0 @@ -# Note: this is a modified version of Makefile, for ACK installation. The -# original flex makefile has a capital M (Makefile). - -EMHOME = ../.. - -# make file for "flex" tool - -# Porting considerations: -# -# For System V Unix machines, add -DUSG to CFLAGS (if it's not -# automatically defined) -# For Vax/VMS, add "-DVMS -DUSG" to CFLAGS. -# For MS-DOS, add "-DMS_DOS -DUSG" to CFLAGS. Create \tmp if not present. -# You will also want to rename flex.skel to something with a three -# character extension, change SKELETON_FILE below appropriately, -# See MSDOS.notes for more info. -# For Amiga, add "-DAMIGA -DUSG" to CFLAGS. -# For SCO Unix, add "-DSCO_UNIX" to CFLAGS. -# -# For C compilers which don't know about "void", add -Dvoid=int to CFLAGS. -# -# If your C compiler is ANSI standard but does not include the -# header file (some installations of gcc have this problem), then add -# -DDONT_HAVE_STDLIB_H to CFLAGS. -# -# By default, flex will be configured to generate 8-bit scanners only -# if the -8 flag is given. If you want it to always generate 8-bit -# scanners, add "-DDEFAULT_CSIZE=256" to CFLAGS. Note that doing -# so will double the size of all uncompressed scanners. -# -# If on your system you have trouble building flex due to 8-bit -# character problems, remove the -8 from FLEX_FLAGS and the -# "#define FLEX_8_BIT_CHARS" from the beginning of flexdef.h. - - -# the first time around use "make first_flex" - - -# Installation targeting. Files will be installed under the tree rooted -# at DESTDIR. User commands will be installed in BINDIR, library files -# in LIBDIR (which will be created if necessary), auxiliary files in -# AUXDIR, manual pages will be installed in MANDIR with extension MANEXT. -# Raw, unformatted troff source will be installed if INSTALLMAN=man, nroff -# preformatted versions will be installed if INSTALLMAN=cat. -DESTDIR = -BINDIR = $(EMHOME)/bin -AUXDIR = $(EMHOME)/lib/flex -MANDIR = $(EMHOME)/man -MANEXT = 1 -INSTALLMAN = man - -# MAKE = make - -SKELETON_FILE = \"`cd $(AUXDIR); pwd`/flex.skel\" -SKELFLAGS = -DDEFAULT_SKELETON_FILE=$(SKELETON_FILE) -CFLAGS = -O -Dvoid=int -DACK_MOD -LDFLAGS = -s - -COMPRESSION = -FLEX_FLAGS = -ist8 -Sflex.skel -# which "flex" to use to generate scan.c from scan.l -FLEX = ./flex -# CC = cc - -AR = ar -RANLIB = ranlib - -FLEXOBJS = \ - ccl.o \ - dfa.o \ - ecs.o \ - gen.o \ - main.o \ - misc.o \ - nfa.o \ - parse.o \ - scan.o \ - sym.o \ - tblcmp.o \ - yylex.o - -FLEX_C_SOURCES = \ - ccl.c \ - dfa.c \ - ecs.c \ - gen.c \ - main.c \ - misc.c \ - nfa.c \ - parse.c \ - scan.c \ - sym.c \ - tblcmp.c \ - yylex.c - - -all : flex - -flex : $(FLEXOBJS) - $(CC) $(CFLAGS) -o flex $(LDFLAGS) $(FLEXOBJS) - -first_flex: - cp initscan.c scan.c - $(MAKE) $(MFLAGS) flex - -parse.h parse.c : parse.y - $(YACC) -d parse.y - @mv y.tab.c parse.c - @mv y.tab.h parse.h - -scan.c : scan.l - $(FLEX) $(FLEX_FLAGS) $(COMPRESSION) scan.l >scan.c - -scan.o : scan.c parse.h flexdef.h - -main.o : main.c flexdef.h - -mkdir $(AUXDIR) - $(CC) $(CFLAGS) -c $(SKELFLAGS) main.c - -ccl.o : ccl.c flexdef.h -dfa.o : dfa.c flexdef.h -ecs.o : ecs.c flexdef.h -gen.o : gen.c flexdef.h -misc.o : misc.c flexdef.h -nfa.o : nfa.c flexdef.h -parse.o : parse.c flexdef.h -sym.o : sym.c flexdef.h -tblcmp.o : tblcmp.c flexdef.h -yylex.o : yylex.c flexdef.h - -lint : $(FLEX_C_SOURCES) - lint $(FLEX_C_SOURCES) > flex.lint - -install: first_flex flex.skel - rm -f $(BINDIR)flex - cp flex $(BINDIR)/flex - cp flex.skel $(AUXDIR)/flex.skel - cp flex.1 $(MANDIR)/flex.1 - cp flexdoc.1 $(MANDIR)/flexdoc.1 - -clean : - rm -f core errs flex *.o parse.c *.lint parse.h tags - -tags : - ctags $(FLEX_C_SOURCES) - -test : flex - ./flex $(FLEX_FLAGS) $(COMPRESSION) scan.l | diff scan.c - - -bigtest : - rm -f scan.c ; $(MAKE) COMPRESSION="-C" test - rm -f scan.c ; $(MAKE) COMPRESSION="-Ce" test - rm -f scan.c ; $(MAKE) COMPRESSION="-Cm" test - rm -f scan.c ; $(MAKE) COMPRESSION="-Cfe" test - rm -f scan.c ; $(MAKE) COMPRESSION="-CFe" test - rm -f scan.c ; $(MAKE) COMPRESSION="-Cf" test - rm -f scan.c ; $(MAKE) COMPRESSION="-CF" test - rm -f scan.c ; $(MAKE) diff --git a/util/grind/Amakefile b/util/grind/Amakefile deleted file mode 100644 index 07c95606c..000000000 --- a/util/grind/Amakefile +++ /dev/null @@ -1,127 +0,0 @@ -AMAKELIB = { . , /usr/local/lib/amake } ; - -%include std-amake.amk ; -%include ack-defs.amk ; -%include cc_hh_tools.amk ; -%include tok_tools.amk ; -%include op_tools.amk ; -%include char_tools.amk ; - -%default grind ; - -%declare tokenname.c [ - gen_tokens, - cc-dest = symbol2str.c, - LL-dest = tokenfile.g -]; - -CMD_LLSRC = { - tokenname.c, - commands.g -} ; - -CSRC = { - main.c, - list.c, - tree.c, - expr.c, - position.c, - idf.c, - run.c, - symbol.c, - print.c, - type.c, - rd.c, - do_comm.c, - modula-2.c, - pascal.c, - c.c -} ; - -HSRC = { - tokenname.h, - operator.h, - class.h, - position.h, - idf.h, - message.h, - avl.h, - scope.h, - langdep.h, - sizes.h, - token.h, - expr.h, - rd.h -} ; - -HHSRC = { - file.hh, - type.hh, - symbol.hh, - tree.hh, - avl.cc, - scope.cc, - itemlist.cc, - langdep.cc -} ; - -LIBRARIES = { - $EMHOME/modules/lib/libassert.a, - $EMHOME/modules/lib/liballoc.a, - $EMHOME/modules/lib/malloc.o, - $EMHOME/modules/lib/libstring.a, - $EMHOME/modules/lib/libobject.a, - $EMHOME/modules/lib/libsystem.a -} ; - -DBFLAGS = { -O, -DDEBUG } ; -PROFFLAGS = { } ; - -LDFLAGS = { - -Bstatic, - $PROFFLAGS, - $DBFLAGS -} ; - -INCLUDES = { - -I$EMHOME/modules/h, - -I$EMHOME/modules/pkg, - -I$EMHOME/h -} ; - -CFLAGS = { - $INCLUDES, - $PROFFLAGS, - $DBFLAGS -} ; - -DBS_LLTARGETS = { - db_symtab.c, - DBSpars.c, - DBSpars.h -} ; - -DBS_LLSRC = { - db_symtab.g -} ; - -%cluster { - %targets $DBS_LLTARGETS ; - %sources $DBS_LLSRC ; - %use LLgen(prefix => DBS) ; -} ; - -LINTFLAGS = { - $INCLUDES -} ; - -%cluster { - %targets lint.out[type = lint-output]; - %sources $CSRC + $CMD_LLSRC + $DBS_LLTARGETS + $HHSRC + char.ct + operators.ot ; - %use lint(realdest => lint.out) ; -} ; - -%cluster { - %targets grind[type = program]; - %sources $CSRC + $CMD_LLSRC + $DBS_LLTARGETS + $HHSRC + char.ct + operators.ot ; -} ; diff --git a/util/grind/LLgen.amk b/util/grind/LLgen.amk deleted file mode 100644 index 8f8a5addc..000000000 --- a/util/grind/LLgen.amk +++ /dev/null @@ -1,39 +0,0 @@ -# LLgen: LL(1) parser generator -# variables: LLGEN, LLFLAGS - -# tool definition for the new version of LLgen that allows for more than -# one parser in one program. Unfortunately, for historical reasons there -# is no proper default prefix for LLgen-generated files (LL.output versus -# Lpars.[ch]). If LLgen would generate LLpars.[ch] instead of Lpars.[ch], -# we could have a default value for prefix of 'LL', which would make -# things a bit more simple. - -%instance deftypesuffix(LLgen-src, '%.g') ; - -%include ack-defs.amk; - -%if (%not defined(LLGEN), { - LLGEN = $EMHOME/bin/LLgen; -}); - -%if (%not defined(LLFLAGS), { - LLFLAGS = {}; -}); - -%tool LLgen ( - verbose: %boolean => %false; - flags: %string %list => $LLFLAGS; - prefix: %string => ''; - src: %in %list [type = LLgen-src]; - parser: %out %list [type = C-src] - => match($src) + if($prefix == '', Lpars.c, $prefix'pars.c'); - tokens: %out [type = C-incl, compare] - => if($prefix == '', Lpars.h, $prefix'pars.h'); - diagn: %out [type = text] - => if($prefix == '', LL.output, $prefix.output) %conform $verbose; - cmd: %in [type = command] => $LLGEN; -) -{ - exec($cmd, args => if($verbose, {'-vvv'}, {}) + $flags + $src); - echo({'LLgen ', $src, ' done'}); -}; diff --git a/util/grind/ack-defs.amk b/util/grind/ack-defs.amk deleted file mode 100644 index 0357a290e..000000000 --- a/util/grind/ack-defs.amk +++ /dev/null @@ -1,5 +0,0 @@ -# definition of EMHOME - -%if (%not defined(EMHOME), { - EMHOME = /usr/proj/em/Work; -}); diff --git a/util/grind/cc_hh_tools.amk b/util/grind/cc_hh_tools.amk deleted file mode 100644 index e03ee5255..000000000 --- a/util/grind/cc_hh_tools.amk +++ /dev/null @@ -1,43 +0,0 @@ -%instance deftypesuffix(hh-src, '%.hh') ; -%instance deftypesuffix(cc-src, '%.cc') ; - -ALLOCD = make.allocd; -NEXT = make.next; - -%tool allochd ( - hhsrc: %in [type = hh-src, persistent]; - hsrc: %out [type = C-incl] => match($hhsrc); - prog: %in [type = command] => $ALLOCD; -) -{ - exec($prog, stdin => $hhsrc, stdout => $hsrc); - echo({$hsrc ,'created'}); -}; - - -%tool alloccd ( - ccsrc: %in [type = cc-src, persistent]; - csrc: %out [type = C-src] => match($ccsrc); - prog: %in [type = command] => $ALLOCD; -) -{ - exec($prog, stdin => $ccsrc, stdout => $csrc); - echo({$csrc ,'created'}); -}; - - -# Possibly there's only one type of { cc-src, hh-src } available, -# so introduce a new attribute. - -%derive f[cc-or-hh-src] %when get($f, type) == cc-src - %or get($f, type) == hh-src; - -%tool mknext ( - cchhsrc: %in %list [cc-or-hh-src]; - next: %out [type = C-src] => next.c; - prog: %in [type = command] => $NEXT; -) -{ - exec($prog, args => $cchhsrc, stdout => $next); - echo({$next ,'created'}); -}; diff --git a/util/grind/char_tools.amk b/util/grind/char_tools.amk deleted file mode 100644 index 9126a0164..000000000 --- a/util/grind/char_tools.amk +++ /dev/null @@ -1,24 +0,0 @@ -# tabgen: tool definition for character table generator -# variables: TABGEN, CHTAB - -%include ack-defs.amk; - -%if (%not defined(TABGEN), { - TABGEN = $EMHOME/bin/tabgen; -}); - -%if (%not defined(CHTAB), { - CHTAB = chtab.c; -}); - -%instance deftypesuffix(char_tab, '%.ct'); - -%tool gen_tab ( - chtab: %in [type = char_tab]; - cfile: %out [type = C-src] => $CHTAB; - mktab: %in [type = command] => $TABGEN; -) -{ - exec($mktab, args => '-f' $chtab, stdout => $cfile); - echo({$cfile, 'created'}); -}; diff --git a/util/grind/dbx_string.g b/util/grind/dbx_string.g deleted file mode 100644 index 4a181b666..000000000 --- a/util/grind/dbx_string.g +++ /dev/null @@ -1,709 +0,0 @@ -/* $Header$ - Grammar of a string of a debugger symbol table entry. -*/ - -{ -#include -#include - -#include "type.h" -#include "symbol.h" -#include "scope.h" -#include "class.h" -#include "idf.h" - -extern char *strindex(); -extern long str2long(); -extern double atof(); -extern int saw_code; -extern long pointer_size; - -static char *DbxPtr; /* current pointer in DBX string */ -static int AllowName; /* set if NAME legal at this point */ -static long ival; -static double fval; -static char *strval; -static int last_index[2]; -static struct outname *currnam; - -static struct literal *get_literal_space(); -static struct fields *get_field_space(); -static end_field(); -static char *string_val(); -} - -%start DbxParser, debugger_string; - -%prefix DBS; - -%lexical DBSlex; - -%onerror DBSonerror; - -%token INTEGER, REAL, STRING, NAME; - -debugger_string - { register p_symbol s; - char *str; - p_type tmp = 0; - } -: - name(&str) - [ /* constant name */ - { s = NewSymbol(str, CurrentScope, CONST, currnam); } - 'c' const_name(s) - - | /* type name */ - { s = NewSymbol(str, CurrentScope, TYPE, currnam); } - 't' type_name(&(s->sy_type), s) - { if (! s->sy_type->ty_sym) s->sy_type->ty_sym = s; - if ((s->sy_type->ty_class == T_ENUM || - s->sy_type->ty_class == T_SUBRANGE) && - currnam->on_desc != 0) { - s->sy_type->ty_size = currnam->on_desc; - } - } - | /* tag name (only C?) */ - { s = NewSymbol(str, CurrentScope, TAG, currnam); } - 'T' type_name(&(s->sy_type), s) - { if (! s->sy_type->ty_sym) s->sy_type->ty_sym = s; - if (s->sy_type->ty_class != T_CROSS) { - resolve_cross(s->sy_type); - } - } - | /* end scope */ - 'E' INTEGER - { close_scope(); } - - | /* module begin */ - { s = NewSymbol(str, CurrentScope, MODULE, currnam); } - 'M' INTEGER - { open_scope(s, 1); - s->sy_name.nm_scope = CurrentScope; - CurrentScope->sc_start = currnam->on_valu; - CurrentScope->sc_proclevel = currnam->on_desc; - add_scope_addr(CurrentScope); - } - - | /* external procedure */ - { s = NewSymbol(str, FileScope, PROC, currnam); } - 'P' routine(s) - - | /* private procedure */ - { s = NewSymbol(str, CurrentScope, PROC, currnam); } - 'Q' routine(s) - - | /* external function */ - { s = NewSymbol(str, FileScope, FUNCTION, currnam); } - 'F' function(s) - - | /* private function */ - { s = NewSymbol(str, CurrentScope, FUNCTION, currnam); } - 'f' function(s) - - | /* global variable, external */ - /* maybe we already know it; but we need - the type information anyway for other - types. - */ - { s = Lookup(findidf(str), FileScope, VAR); - if (s) { - tmp = s->sy_type; - s->sy_type = 0; - } else s = NewSymbol(str, FileScope, VAR, currnam); - } - 'G' type(&(s->sy_type), (int *) 0, s) - { if (tmp) s->sy_type = tmp; } - - | /* static variable */ - { s = NewSymbol(str, CurrentScope, VAR, currnam); } - 'S' type(&(s->sy_type), (int *) 0, s) - - | /* static variable, local scope */ - { s = NewSymbol(str, CurrentScope, VAR, currnam); } - 'V' type(&(s->sy_type), (int *) 0, s) - - | /* register variable */ - { s = NewSymbol(str, CurrentScope, REGVAR, currnam); } - 'r' type(&(s->sy_type), (int *) 0, s) - - | /* value parameter */ - { s = NewSymbol(str, CurrentScope, LOCVAR, currnam); } - 'p' type(&(s->sy_type), (int *) 0, s) - { add_param_type('p', s); } - - | /* value parameter but address passed */ - { s = NewSymbol(str, CurrentScope, VARPAR, currnam); } - 'i' type(&(s->sy_type), (int *) 0, s) - { add_param_type('i', s); } - - | /* variable parameter */ - { s = NewSymbol(str, CurrentScope, VARPAR, currnam); } - 'v' type(&(s->sy_type), (int *) 0, s) - { add_param_type('v', s); } - - | /* local variable */ - { s = NewSymbol(str, CurrentScope, LOCVAR, currnam); } - type_name(&(s->sy_type), s) - - | /* function result in Pascal; ignore ??? */ - { s = NewSymbol(str, CurrentScope, LOCVAR, currnam); } - 'X' type_name(&(s->sy_type), s) - ] - ';'? -; - -name(char **s;) -: - /* anything up to a ':' */ - NAME { *s = strval; } -; - -const_name(p_symbol cst;) - { int type_index[2]; - long iconst; - register char *p; - } -: - '=' - [ -/* - 'b' integer_const(&(cst->sy_const.co_ival)) /* boolean */ -/* | -*/ - 'c' integer_const(&(cst->sy_const.co_ival)) /* character */ - { cst->sy_type = char_type; } - | - 'i' integer_const(&(cst->sy_const.co_ival)) /* integer */ - { cst->sy_type = long_type; } - | - 'r' real_const(&(cst->sy_const.co_rval)) /* real */ - { cst->sy_type = double_type; } - | - 's' string_const /* string */ - { cst->sy_const.co_sval = string_val(strval); - cst->sy_type = string_type; - } - | - 'e' type_index(type_index) ',' integer_const(&(cst->sy_const.co_ival)) - /* enumeration constant; - * enumeration type, value - */ - { cst->sy_type = *tp_lookup(type_index); } - - | - 'S' type_index(type_index) - { cst->sy_type = *tp_lookup(type_index); - cst->sy_const.co_setval = p = - Malloc((unsigned) cst->sy_type->ty_size); - } - [ ',' integer_const(&iconst) - { *p++ = iconst; } - ]+ - /* set constant: - * settype, values of the bytes - * in the set. - */ - ] -; - -integer_const(long *iconst;) - { int sign = 0; } -: - [ '+' | '-' { sign = 1; } ]? - INTEGER { *iconst = sign ? -ival : ival; } -; - -real_const(double *f;) - { int sign = 0; } -: - [ '+' | '-' { sign = 1; } ]? - REAL { *f = sign ? fval : -fval; } -; - -string_const -: - STRING /* has SINGLE quotes! */ -; - -type_name(p_type *t; p_symbol sy;) - { int type_index[2]; p_type *p; } -: - type_index(type_index) { p = tp_lookup(type_index); } - [ - { if (*p && (*p)->ty_class != 0 && - (*p)->ty_class != T_CROSS) { - error("Redefining (%d,%d) %d", - type_index[0], - type_index[1], - (*p)->ty_class); - } - } - '=' - type(p, type_index, sy) - | - ] - { if (*p == 0) *p = new_type(); - *t = *p; - } -; - -type_index(int *type_index;) -: -[ - INTEGER { type_index[0] = 0; type_index[1] = ival; } -| - '(' INTEGER { type_index[0] = ival; } - ',' INTEGER { type_index[1] = ival; } - ')' -] - { last_index[0] = type_index[0]; - last_index[1] = type_index[1]; - } -; - -function(p_symbol p;) -: - { p->sy_type = new_type(); - p->sy_type->ty_class = T_PROCEDURE; - p->sy_type->ty_size = pointer_size; - } - type(&(p->sy_type->ty_retval), (int *) 0, (p_symbol) 0) - { if (CurrentScope != FileScope && - saw_code) { - /* if saw_code is not set, it is a nested - procedure - */ - close_scope(); - } - saw_code = 0; - open_scope(p, 1); - p->sy_name.nm_scope = CurrentScope; - CurrentScope->sc_start = currnam->on_valu; - add_scope_addr(CurrentScope); - CurrentScope->sc_proclevel = currnam->on_desc; - } -; - -routine(p_symbol p;) -: - { p->sy_type = new_type(); - p->sy_type->ty_class = T_PROCEDURE; - p->sy_type->ty_size = pointer_size; - if (CurrentScope != FileScope && - saw_code) { - /* if saw_code is not set, it is a nested - procedure - */ - close_scope(); - } - saw_code = 0; - open_scope(p, 1); - p->sy_name.nm_scope = CurrentScope; - CurrentScope->sc_start = currnam->on_valu; - add_scope_addr(CurrentScope); - CurrentScope->sc_proclevel = currnam->on_desc; - } - INTEGER ';' - type(&(p->sy_type->ty_retval), (int *) 0, (p_symbol) 0) -; - -type(p_type *ptp; int *type_index; p_symbol sy;) - { register p_type tp = *ptp ? *ptp : new_type(); - p_type t1 = 0, t2 = 0; - long ic1, ic2; - int A_used = 0; - int tclass; - int tp_index[2]; - char *str; - } -: - [ - /* type cross reference */ - /* these are used in C for references to a struct, union or - * enum that has not been declared (yet) - */ - 'x' - [ 's' /* struct */ - { tclass = T_STRUCT; } - | 'u' /* union */ - { tclass = T_UNION; } - | 'e' /* enum */ - { tclass = T_ENUM; } - ] - { AllowName = 1; } - name(&str) - { sy = Lookfromscope(str2idf(str,0),TAG,CurrentScope); - if (sy && - (sy->sy_type->ty_class == tclass || - sy->sy_type->ty_class == T_CROSS)) { - if (tp != *ptp) free_type(tp); - tp = sy->sy_type; - } - else { - tp->ty_class = T_CROSS; - tp->ty_size = tclass; - sy = NewSymbol(str, CurrentScope, TAG, (struct outname *) 0); - sy->sy_type = tp; - } - } - | - /* subrange */ - /* the integer_const's represent the lower and the upper bound. - * A subrange type defined as subrange of itself is an integer type. - * If the second integer_const == 0, but the first is not, we - * have a floating point type with size equal to the first - * integer_const. - * Upperbound -1 means unsigned int or unsigned long. - */ - 'r' type_index(tp_index) ';' - [ 'A' integer_const(&ic1) { A_used = 1; } - | integer_const(&ic1) - ] - ';' - [ 'A' integer_const(&ic2) { A_used |= 2; } - | integer_const(&ic2) - ] - { if (tp != *ptp) free_type(tp); - tp = subrange_type(A_used, - tp_index, - ic1, - ic2, - type_index); - } - | - /* array; first type is bound type, next type - * is element type - */ - 'a' type(&t1, (int *) 0, (p_symbol) 0) ';' type(&t2, (int *) 0, (p_symbol) 0) - { if (tp != *ptp) free_type(tp); - tp = array_type(t1, t2); - } - | - /* structure type */ - 's' { tp->ty_class = T_STRUCT; } - structure_type(tp, sy) - | - /* union type */ - 'u' { tp->ty_class = T_UNION; } - structure_type(tp, sy) - | - /* enumeration type */ - 'e' { tp->ty_class = T_ENUM; } - enum_type(tp) - | - /* pointer type */ - '*' { tp->ty_class = T_POINTER; - tp->ty_size = pointer_size; - } - type(&(tp->ty_ptrto), (int *) 0, (p_symbol) 0) - | - /* function type */ - 'f' { tp->ty_class = T_PROCEDURE; - tp->ty_size = pointer_size; - } - type(&(tp->ty_retval), (int *) 0, (p_symbol) 0) -/* - [ %prefer - ',' param_list(tp) - | - ] -*/ - | - /* procedure type */ - 'Q' { tp->ty_class = T_PROCEDURE; - tp->ty_size = pointer_size; - } - type(&(tp->ty_retval), (int *) 0, (p_symbol) 0) - ',' param_list(tp) - | - /* another procedure type */ - 'p' { tp->ty_class = T_PROCEDURE; - tp->ty_size = pointer_size; - tp->ty_retval = void_type; - } - param_list(tp) - | - /* set type */ - /* the first integer_const represents the size in bytes, - * the second one represents the low bound - */ - 'S' { tp->ty_class = T_SET; } - type(&(tp->ty_setbase), (int *) 0, (p_symbol) 0) ';' - [ - integer_const(&(tp->ty_size)) ';' - integer_const(&(tp->ty_setlow)) ';' - | - { set_bounds(tp); } - ] - | - /* file type of Pascal */ - 'L' { tp->ty_class = T_FILE; } - type(&(tp->ty_fileof), (int *) 0, (p_symbol) 0) - | - type_name(ptp, (p_symbol) 0) - { if (type_index && - (*ptp)->ty_class == 0 && - type_index[0] == last_index[0] && - type_index[1] == last_index[1]) { - **ptp = *void_type; - if (*ptp != tp) free_type(tp); - } - tp = *ptp; - } - ] - { if (*ptp && *ptp != tp) **ptp = *tp; - else *ptp = tp; - } -; - -structure_type(register p_type tp; p_symbol sy;) - { register struct fields *fldp; - char *str; - } -: - integer_const(&(tp->ty_size)) /* size in bytes */ - { open_scope(sy, 0); - if (sy) sy->sy_name.nm_scope = CurrentScope; - } - [ - name(&str) { fldp = get_field_space(tp, str); } - type(&(fldp->fld_type), (int *) 0, (p_symbol) 0) ',' - integer_const(&(fldp->fld_pos)) ',' /* offset in bits */ - integer_const(&(fldp->fld_bitsize)) ';' /* size in bits */ - ]* - ';' { end_field(tp); - close_scope(); - } -; - -enum_type(register p_type tp;) - { register struct literal *litp; - long maxval = 0; - register p_symbol s; - } -: - [ { litp = get_literal_space(tp); } - name(&(litp->lit_name)) - integer_const(&(litp->lit_val)) ',' - { if (maxval < litp->lit_val) maxval = litp->lit_val; - AllowName = 1; - s = NewSymbol(litp->lit_name, CurrentScope, CONST, (struct outname *) 0); - s->sy_const.co_ival = litp->lit_val; - s->sy_type = tp; - } - ]* - ';' { end_literal(tp, maxval); } -; - -param_list(p_type t;) - { register struct param *p; - long iconst; - } -: - integer_const(&iconst) ';' /* number of parameters */ - { t->ty_nparams = iconst; - t->ty_params = p = (struct param *) - Malloc((unsigned)(t->ty_nparams * sizeof(struct param))); - } - [ - [ 'p' { p->par_kind = 'p'; } - | 'v' { p->par_kind = 'v'; } - | 'i' { p->par_kind = 'i'; } - ] - type(&(p->par_type), (int *) 0, (p_symbol) 0) ';' - { t->ty_nbparams += - param_size(p->par_type, p->par_kind); - p++; - } - ]* -; - -{ -static char *dbx_string; -static char *DbxOldPtr; - -struct outname * -DbxString(n) - struct outname *n; -{ - currnam = n; - DbxPtr = n->on_mptr; - dbx_string = DbxPtr; - AllowName = 1; - DbxParser(); - return currnam; -} - -/*ARGSUSED*/ -DBSmessage(n) -{ - fatal("error in Dbx string \"%s\", DbxPtr = \"%s\", DbxOldPtr = \"%s\"", - dbx_string, - DbxPtr, - DbxOldPtr); - -} - -DBSonerror(tk, p) - int *p; -{ - DbxPtr = DbxOldPtr; -/* ??? if (DBSsymb < 0) { - while (*p && *p != ';') p++; - if (*p) DbxPtr = ";"; - return; - } -*/ - if (! tk) { - while (*p && *p != NAME) p++; - if (*p) { - AllowName = 1; - } - } - else if (tk == NAME) AllowName = 1; -} - -DBSlex() -{ - register char *cp = DbxPtr; - int allow_name = AllowName; - register int c; - - AllowName = 0; - DbxOldPtr = cp; - c = *cp; - if (c == '\\' && *(cp+1) == '\0') { - currnam++; - cp = currnam->on_mptr; - DbxOldPtr = cp; - c = *cp; - } - if (! c) { - DbxPtr = cp; - return -1; - } - if ((! allow_name && is_token(c)) || c == ';') { - DbxPtr = cp+1; - return c; - } - if (is_dig(c)) { - int retval = INTEGER; - - while (++cp, is_dig(*cp)) /* nothing */; - c = *cp; - if (c == '.') { - retval = REAL; - while (++cp, is_dig(*cp)) /* nothing */; - c = *cp; - } - if (c == 'e' || c == 'E') { - char *oldcp = cp; - - cp++; - c = *cp; - if (c == '-' || c == '+') { - cp++; - c = *cp; - } - if (is_dig(c)) { - retval = REAL; - while (++cp, is_dig(*cp)) /* nothing */; - } - else cp = oldcp; - } - c = *cp; - *cp = 0; - if (retval == INTEGER) { - ival = str2long(DbxOldPtr, 10); - } - else { - fval = atof(DbxOldPtr); - } - *cp = c; - DbxPtr = cp; - return retval; - } - if (c == '\'') { - cp++; - strval = cp; - while ((c = *cp) && c != '\'') { - if (c == '\\') cp++; /* backslash escapes next character */ - if (!(c = *cp)) break; /* but not a null byte */ - cp++; - } - if (! c) DBSmessage(0); /* no return */ - *cp = 0; - DbxPtr = cp + 1; - return STRING; - } - strval = cp; - while ((c = *cp) && c != ':' && c != ',') cp++; - DbxPtr = *cp ? cp+1 : cp; - *cp = 0; - return NAME; -} - -static struct fields * -get_field_space(tp, s) - register p_type tp; - char *s; -{ - register struct fields *p; - p_symbol sy; - - if (! (tp->ty_nfields & 07)) { - tp->ty_fields = (struct fields *) - Realloc((char *) tp->ty_fields, - (tp->ty_nfields+8)*sizeof(struct fields)); - } - p = &tp->ty_fields[tp->ty_nfields++]; - p->fld_name = s; - p->fld_type = 0; - sy = NewSymbol(s, CurrentScope, FIELD, currnam); - sy->sy_field = p; - return p; -} - -static -end_field(tp) - register p_type tp; -{ - tp->ty_fields = (struct fields *) - Realloc((char *) tp->ty_fields, - tp->ty_nfields * sizeof(struct fields)); -} - -static struct literal * -get_literal_space(tp) - register p_type tp; -{ - if (! (tp->ty_nenums & 07)) { - tp->ty_literals = (struct literal *) - Realloc((char *) tp->ty_literals, - (tp->ty_nenums+8)*sizeof(struct literal)); - } - return &tp->ty_literals[tp->ty_nenums++]; -} - -static char * -string_val(s) - char *s; -{ - register char *ns = s, *os = s; - register unsigned int i = 1; - - for (;;) { - if (!*os) break; - i++; - if (*os == '\\') { - os++; - *ns++ = *os++; - } - else *ns++ = *os++; - } - *ns = '\0'; - return Salloc(s, i); -} - -} diff --git a/util/grind/dbxread.c b/util/grind/dbxread.c deleted file mode 100644 index 7b4b51e9a..000000000 --- a/util/grind/dbxread.c +++ /dev/null @@ -1,194 +0,0 @@ -/* $Header$ - Read the symbol table from an ACK a.out format file. -*/ - -#include -#include -#include - -#include "position.h" -#include "file.h" -#include "symbol.h" -#include "idf.h" -#include "scope.h" -#include "rd.h" - -extern char *strindex(); -extern struct outname *DbxString(); - -int saw_code = 0; - -static char *AckStrings; /* ACK a.out string table */ -static struct outname *AckNames; /* ACK a.out symbol table entries */ -static unsigned int NAckNames; /* Number of ACK symbol table entries */ -static struct outname *EndAckNames; /* &AckNames[NAckNames] */ - -/* Read the symbol table from file 'f', which is supposed to be an - ACK a.out format file. Offer DBX strings to the DBX string parser. -*/ -int -DbxRead(f) - char *f; -{ - struct outhead h; - register struct outname *n; - register struct outname *line_file = 0; - long OffsetStrings; - int had_lbrac = 0; - - /* Open file, read header, and check magic word */ - if (! rd_open(f)) { - fatal("%s: could not open", f); - } - rd_ohead(&h); - if (BADMAGIC(h) && h.oh_magic != O_CONVERTED) { - fatal("%s: not an object file", f); - } - - /* Allocate space for name table and read it */ - AckNames = (struct outname *) - Malloc((unsigned)(sizeof(struct outname) * h.oh_nname)); - AckStrings = Malloc((unsigned) h.oh_nchar); - rd_name(AckNames, h.oh_nname); - rd_string(AckStrings, h.oh_nchar); - - /* Adjust file offsets in name table to point at strings */ - OffsetStrings = OFF_CHAR(h); - NAckNames = h.oh_nname; - EndAckNames = &AckNames[h.oh_nname]; - for (n = EndAckNames; --n >= AckNames;) { - if (n->on_foff) { - if ((unsigned)(n->on_foff - OffsetStrings) >= h.oh_nchar) { - fatal("%s: error in object file", f); - } - n->on_mptr = AckStrings + (n->on_foff - OffsetStrings); - } - else n->on_mptr = 0; - } - - /* Offer strings to the DBX string parser if they contain a ':'. - Also offer filename-line number information to add_position_addr(). - Here, the order may be important. - */ - for (n = &AckNames[0]; n < EndAckNames; n++) { - int tp = n->on_type >> 8; - register p_symbol sym; - - if (tp & (S_STB >> 8)) { - switch(tp) { -#ifdef N_BINCL - case N_BINCL: - n->on_valu = (long) line_file; - line_file = n; - break; - case N_EINCL: - if (line_file) { - line_file = (struct outname *) line_file->on_valu; - } - break; -#endif - case N_SO: - if (n->on_mptr[strlen(n->on_mptr)-1] == '/') { - /* another N_SO follows ... */ - break; - } - while (CurrentScope != PervasiveScope) { - close_scope(); - } - saw_code = 0; - sym = add_file(n->on_mptr); - - if (! listfile) newfile(sym->sy_idf); - open_scope(sym, 0); - sym->sy_file->f_scope = CurrentScope; - FileScope = CurrentScope; - clean_tp_tab(); - /* fall through */ - case N_SOL: - if (! line_file) line_file = n; - else line_file->on_mptr = n->on_mptr; - break; - case N_MAIN: - newfile(FileScope->sc_definedby->sy_idf); - break; - case N_SLINE: - assert(line_file); - if (! saw_code && !CurrentScope->sc_bp_opp) { - CurrentScope->sc_bp_opp = n->on_valu; - if (! CurrentScope->sc_start) { - CurrentScope->sc_start = n->on_valu; - if (CurrentScope->sc_has_activation_record) { - add_scope_addr(CurrentScope); - } - } - } - saw_code = 1; - add_position_addr(line_file->on_mptr, n); - break; - case N_LBRAC: /* block, desc = nesting level */ - if (had_lbrac) { - open_scope((p_symbol) 0, 0); - saw_code = 0; - } - else { - register p_scope sc = - get_scope_from_addr(n->on_valu); - - if (!sc || sc->sc_bp_opp) { - had_lbrac = 1; - } - else CurrentScope = sc; - } - break; -#ifdef N_SCOPE - case N_SCOPE: - if (n->on_mptr && strindex(n->on_mptr, ':')) { - n = DbxString(n); - } - break; -#endif - case N_RBRAC: /* end block, desc = nesting level */ - had_lbrac = 0; - if (CurrentScope != FileScope) close_scope(); - saw_code = 0; - break; - case N_FUN: /* function, value = address */ - case N_GSYM: /* global variable */ - case N_STSYM: /* data, static, value = address */ - case N_LCSYM: /* bss, static, value = address */ - case N_RSYM: /* register var, value = reg number */ - case N_SSYM: /* struct/union el, value = offset */ - case N_PSYM: /* parameter, value = offset from AP */ - case N_LSYM: /* local sym, value = offset from FP */ - if (had_lbrac) { - open_scope((p_symbol) 0, 0); - saw_code = 0; - had_lbrac = 0; - } - if (n->on_mptr && strindex(n->on_mptr, ':')) { - n = DbxString(n); - } - break; - default: -/* - if (n->on_mptr && (n->on_type&S_TYP) >= S_MIN) { - struct idf *id = str2idf(n->on_mptr, 0); - - sym = new_symbol(); - sym->sy_next = id->id_def; - id->id_def = sym; - sym->sy_class = SYMENTRY; - sym->sy_onam = *n; - sym->sy_idf = id; - } -*/ - break; - } - } - } - close_scope(); - add_position_addr((char *) 0, (struct outname *) 0); - clean_tp_tab(); - rd_close(); - return (h.oh_magic == O_CONVERTED); -} diff --git a/util/grind/default.c b/util/grind/default.c deleted file mode 100644 index c2bbb0e07..000000000 --- a/util/grind/default.c +++ /dev/null @@ -1,341 +0,0 @@ -/* $Header$ */ - -/* Language dependant support; this one is default */ - -#include -#include - -#include "position.h" -#include "class.h" -#include "langdep.h" -#include "Lpars.h" -#include "idf.h" -#include "token.h" -#include "expr.h" -#include "tree.h" -#include "operator.h" - -extern FILE *db_out, *db_in; - -extern int - get_name(); - -extern double - atof(); - -static int - print_string(), - get_number(), - get_string(), - get_token(), - print_op(), - op_prio(); - -static long - array_elsize(); - -static struct langdep def = { - 0, - - "%ld", - "0%lo", - "0x%lX", - "%lu", - "0x%lX", - "%g", - "'\\%o'", - - "[", - "]", - "(", - ")", - "{", - "}", - - print_string, - array_elsize, - op_prio, - get_string, - get_name, - get_number, - get_token, - print_op -}; - -struct langdep *def_dep = &def; - -static int -print_string(s, len) - char *s; - int len; -{ - register char *str = s; - int delim = '\''; - - while (*str) { - if (*str++ == '\'') delim = '"'; - } - fprintf(db_out, "%c%.*s%c", delim, len, s, delim); -} - -extern long int_size; - -static long -array_elsize(size) - long size; -{ - if (! (int_size % size)) return size; - if (! (size % int_size)) return size; - return ((size + int_size - 1) / int_size) * int_size; -} - -/*ARGSUSED*/ -static int -op_prio(op) - int op; -{ - return 1; -} - -static int -val_in_base(c, base) - register int c; -{ - return is_dig(c) - ? c - '0' - : base != 16 - ? -1 - : is_hex(c) - ? (c - 'a' + 10) & 017 - : -1; -} - -static int -get_number(c) - register int c; -{ - char buf[512+1]; - register int base = 10; - register char *p = &buf[0]; - register long val = 0; - register int val_c; - - if (c == '0') { - /* check if next char is an 'x' or an 'X' */ - c = getc(db_in); - if (c == 'x' || c == 'X') { - base = 16; - c = getc(db_in); - } - else base = 8; - } - while (val_c = val_in_base(c, base), val_c >= 0) { - val = val * base + val_c; - if (p - buf < 512) *p++ = c; - c = getc(db_in); - } - if (base == 16 || !((c == '.' || c == 'e' || c == 'E'))) { - ungetc(c, db_in); - tok.ival = val; - return INTEGER; - } - if (c == '.') { - if (p - buf < 512) *p++ = c; - c = getc(db_in); - } - while (is_dig(c)) { - if (p - buf < 512) *p++ = c; - c = getc(db_in); - } - if (c == 'e' || c == 'E') { - if (p - buf < 512) *p++ = c; - c = getc(db_in); - if (c == '+' || c == '-') { - if (p - buf < 512) *p++ = c; - c = getc(db_in); - } - if (! is_dig(c)) { - error("malformed floating constant"); - } - while (is_dig(c)) { - if (p - buf < 512) *p++ = c; - c = getc(db_in); - } - } - ungetc(c, db_in); - *p++ = 0; - if (p == &buf[512+1]) { - error("floating point constant too long"); - } - tok.fval = atof(buf); - return REAL; -} - -static int -get_token(c) - register int c; -{ - switch(c) { - case '`': - case ':': - case ',': - return c; - case '.': - return get_number(c); - default: - error("illegal character 0%o", c); - return LLlex(); - } -} - -static int -quoted(ch) - int ch; -{ - /* quoted() replaces an escaped character sequence by the - character meant. - */ - /* first char after backslash already in ch */ - if (!is_oct(ch)) { /* a quoted char */ - switch (ch) { - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'b': - ch = '\b'; - break; - case 'r': - ch = '\r'; - break; - case 'f': - ch = '\f'; - break; - } - } - else { /* a quoted octal */ - register int oct = 0, cnt = 0; - - do { - oct = oct*8 + (ch-'0'); - ch = getc(db_in); - } while (is_oct(ch) && ++cnt < 3); - ungetc(ch, db_in); - ch = oct; - } - return ch&0377; - -} - -static int -get_string(c) - int c; -{ - register int ch; - char buf[512]; - register int len = 0; - - while (ch = getc(db_in), ch != c) { - if (ch == '\n') { - error("newline in string"); - break; - } - if (ch == '\\') { - ch = getc(db_in); - ch = quoted(ch); - } - buf[len++] = ch; - } - buf[len++] = 0; - tok.str = Salloc(buf, (unsigned) len); - return STRING; -} - -static int -print_op(p) - p_tree p; -{ - switch(p->t_oper) { - case OP_UNOP: - switch(p->t_whichoper) { - case E_MIN: - fputs("-", db_out); - print_node(p->t_args[0], 0); - break; - case E_PLUS: - fputs("+", db_out); - print_node(p->t_args[0], 0); - break; - case E_NOT: - fputs("~", db_out); - print_node(p->t_args[0], 0); - break; - case E_DEREF: - fputs("*", db_out); - print_node(p->t_args[0], 0); - break; - } - break; - case OP_BINOP: - fputs("(", db_out); - print_node(p->t_args[0], 0); - switch(p->t_whichoper) { - case E_AND: - fputs("&&", db_out); - break; - case E_OR: - fputs("||", db_out); - break; - case E_ZDIV: - fputs("/", db_out); - break; - case E_ZMOD: - fputs("%", db_out); - break; - case E_DIV: - fputs(" div ", db_out); - break; - case E_MOD: - fputs(" mod ", db_out); - break; - case E_IN: - fputs(" in ", db_out); - break; - case E_PLUS: - fputs("+", db_out); - break; - case E_MIN: - fputs("-", db_out); - break; - case E_MUL: - fputs("*", db_out); - break; - case E_EQUAL: - fputs("==", db_out); - break; - case E_NOTEQUAL: - fputs("!=", db_out); - break; - case E_LTEQUAL: - fputs("<=", db_out); - break; - case E_GTEQUAL: - fputs(">=", db_out); - break; - case E_LT: - fputs("<", db_out); - break; - case E_GT: - fputs(">", db_out); - break; - case E_SELECT: - fputs(".", db_out); - break; - } - print_node(p->t_args[1], 0); - fputs(")", db_out); - break; - } -} diff --git a/util/grind/dump.c b/util/grind/dump.c deleted file mode 100644 index 5f6c0c228..000000000 --- a/util/grind/dump.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Header$ */ - -#include -#include - -#include "operator.h" -#include "position.h" -#include "tree.h" -#include "message.h" -#include "type.h" -#include "expr.h" - -extern long pointer_size; -extern p_tree get_from_item_list(); - -struct dump { - char *globals, *stack; - struct message_hdr mglobal, mstack; - struct dump *next; -}; - -static struct dump *last_dump; - -/* dumping and restoring of child process. -*/ -do_dump(p) - p_tree p; -{ - struct dump *d = (struct dump *) malloc(sizeof(struct dump)); - - if (! d) { - error("could not allocate enough memory"); - return; - } - if (! get_dump(&d->mglobal, &d->globals, &d->mstack, &d->stack)) { - free((char *) d); - return; - } - p->t_args[0] = (struct tree *) d; - p->t_address = (t_addr) get_int(d->mglobal.m_buf+PC_OFF*pointer_size, pointer_size, T_UNSIGNED); - add_to_item_list(p); - d->next = last_dump; - last_dump = d; -} - -/* dumping and restoring of child process. -*/ -do_restore(p) - p_tree p; -{ - struct dump *d; - - if (p->t_args[0]) { - p = get_from_item_list((int) p->t_args[0]->t_ival); - if (!p || p->t_oper != OP_DUMP) { - error("no such dump"); - return; - } - d = (struct dump *) p->t_args[0]; - } - else d = last_dump; - - if (! d) { - error("no dumps"); - return; - } - - if (! put_dump(&d->mglobal, d->globals, &d->mstack, d->stack)) { - } - do_items(); -} - -free_dump(p) - p_tree p; -{ - struct dump *d = (struct dump *) p->t_args[0]; - - free(d->globals); - free(d->stack); - if (d == last_dump) last_dump = d->next; - else { - register struct dump *d1 = last_dump; - - while (d1->next != d) d1 = d1->next; - d1->next = d->next; - } - free((char *) d); -} diff --git a/util/grind/op_tools.amk b/util/grind/op_tools.amk deleted file mode 100644 index fd5b04766..000000000 --- a/util/grind/op_tools.amk +++ /dev/null @@ -1,14 +0,0 @@ -MAKE_OPS = make.ops; - -%instance deftypesuffix(op_tab, '%.ot'); - -%tool gen_ops ( - ops: %in [type = op_tab]; - cfile: %out [type = C-src] => ops.c; - hfile: %out [type = C-incl] => ops.h; - mkops: %in [type = command] => $MAKE_OPS; -) -{ - exec($mkops, args => $ops); - echo({$cfile, 'and', $hfile, 'created'}); -}; diff --git a/util/grind/sizes.h b/util/grind/sizes.h deleted file mode 100644 index 93a16a1f5..000000000 --- a/util/grind/sizes.h +++ /dev/null @@ -1,10 +0,0 @@ -/* $Header$ */ - -/* For the time being ... */ - -#define SZ_INT 4 -#define SZ_SHORT 2 -#define SZ_POINTER 4 -#define SZ_LONG 4 -#define SZ_FLOAT 4 -#define SZ_DOUBLE 8 diff --git a/util/grind/tok_tools.amk b/util/grind/tok_tools.amk deleted file mode 100644 index 48d4cb355..000000000 --- a/util/grind/tok_tools.amk +++ /dev/null @@ -1,15 +0,0 @@ -MAKE_TOKFILE = make.tokfile; -MAKE_TOKCASE = make.tokcase; - -%tool gen_tokens ( - csrc: %in [type = C-src, gen_tokens, persistent]; - tokfile: %out [type = LLgen-src] => get($csrc, LL-dest); - symbols: %out [type = C-src] => get($csrc, cc-dest); - mktok: %in [type = command] => $MAKE_TOKFILE; - mkcase: %in [type = command] => $MAKE_TOKCASE; -) -{ - exec($mktok, stdin => $csrc, stdout => $tokfile); - exec($mkcase, stdin => $csrc, stdout => $symbols); - echo({$tokfile, 'and', $symbols, 'created'}); -}; diff --git a/util/grind/value.c b/util/grind/value.c deleted file mode 100644 index 8262f8fce..000000000 --- a/util/grind/value.c +++ /dev/null @@ -1,182 +0,0 @@ -/* $Header$ */ - -#include -#include - -#include "position.h" -#include "scope.h" -#include "idf.h" -#include "symbol.h" -#include "type.h" -#include "message.h" -#include "langdep.h" -#include "expr.h" - -int stack_offset; /* for up and down commands */ - -extern long pointer_size; -extern t_addr *get_EM_regs(); -extern char *memcpy(); - -/* Get the address of the object indicated by sym. - Return 0 on failure, - address on success. - *psize will contain size of object. -*/ -t_addr -get_addr(sym, psize) - register p_symbol sym; - long *psize; -{ - p_type tp = sym->sy_type; - long size = tp->ty_size; - t_addr *EM_regs; - int i; - p_scope sc, symsc; - - *psize = size; - switch(sym->sy_class) { - case VAR: - /* exists if child exists; nm_value contains addres */ - return (t_addr) sym->sy_name.nm_value; - case VARPAR: - case LOCVAR: - /* first find the stack frame in which it resides */ - symsc = base_scope(sym->sy_scope); - - /* now symsc contains the scope where the storage for sym is - allocated. Now find it on the stack of child. - */ - i = stack_offset; - for (;;) { - sc = 0; - if (! (EM_regs = get_EM_regs(i++))) { - return 0; - } - if (! EM_regs[1]) { - error("%s not available", sym->sy_idf->id_text); - return 0; - } - sc = base_scope(get_scope_from_addr(EM_regs[2])); - if (! sc || sc->sc_start > EM_regs[2]) { - error("%s not available", sym->sy_idf->id_text); - sc = 0; - return 0; - } - if (sc == symsc) break; /* found it */ - } - - if (sym->sy_class == LOCVAR) { - /* Either local variable or value parameter */ - return EM_regs[sym->sy_name.nm_value < 0 ? 0 : 1] + - (t_addr) sym->sy_name.nm_value; - } - - /* If we get here, we have a var parameter. Get the parameters - of the current procedure invocation. - */ - { - p_type proctype = sc->sc_definedby->sy_type; - t_addr a; - char *AB; - - size = proctype->ty_nbparams; - if (has_static_link(sc)) size += pointer_size; - AB = malloc((unsigned) size); - if (! AB) { - error("could not allocate enough memory"); - break; - } - if (! get_bytes(size, EM_regs[1], AB)) { - break; - } - if ((size = tp->ty_size) == 0) { - size = compute_size(tp, AB); - *psize = size; - } - a = (t_addr) get_int(AB+sym->sy_name.nm_value, pointer_size, T_UNSIGNED); - free(AB); - return a; - } - default: - error("%s is not a variable", sym->sy_idf->id_text); - break; - } - return 0; -} - -/* Get the value of the symbol indicated by sym. - Return 0 on failure, - 1 on success. - On success, 'buf' contains the value, and 'size' contains the size. - For 'buf', storage is allocated by malloc; this storage must - be freed by caller (I don't like this any more than you do, but caller - does not know sizes). -*/ -int -get_value(sym, buf, psize) - register p_symbol sym; - char **buf; - long *psize; -{ - p_type tp = sym->sy_type; - int retval = 0; - t_addr a; - long size = tp->ty_size; - - *buf = 0; - switch(sym->sy_class) { - case CONST: - *buf = malloc((unsigned) size); - if (! *buf) { - error("could not allocate enough memory"); - break; - } - switch(tp->ty_class) { - case T_REAL: - put_real(*buf, size, sym->sy_const.co_rval); - break; - case T_INTEGER: - case T_SUBRANGE: - case T_UNSIGNED: - case T_ENUM: - put_int(*buf, size, sym->sy_const.co_ival); - break; - case T_SET: - memcpy(*buf, sym->sy_const.co_setval, (int) size); - break; - case T_STRING: - memcpy(*buf, sym->sy_const.co_sval, (int) size); - break; - default: - fatal("strange constant"); - } - retval = 1; - break; - case VAR: - case VARPAR: - case LOCVAR: - a = get_addr(sym, psize); - if (a) { - size = *psize; - *buf = malloc((unsigned) size); - if (! *buf) { - error("could not allocate enough memory"); - break; - } - if (get_bytes(size, a, *buf)) { - retval = 1; - } - } - break; - } - - if (retval == 0) { - if (*buf) free(*buf); - *buf = 0; - *psize = 0; - } - else *psize = size; - - return retval; -} diff --git a/util/int/Makefile b/util/int/Makefile deleted file mode 100644 index c0ab33a8e..000000000 --- a/util/int/Makefile +++ /dev/null @@ -1,175 +0,0 @@ -# $Header$ - -EM = ../..# # EM tree - -CC = cc# # C comp used for compiling the interpreter -CFLAGS = -O# # passed to C compiler -LFLAGS = # # passed to loader - -IDIRS = -I$(EM)/h# # passed to C compiler and lint - -LINT = lint# # lint to be used -LINTFLAGS = -h# # passed to lint - -INT = ./int# # name of resulting interpreter - -IP_SPEC = $(EM)/etc/ip_spec.t -TRAPS = $(EM)/etc/traps -APP_A = $(EM)/doc/int/appA # to be moved later - -SRC = alloc.c core.c data.c do_array.c do_branch.c do_comp.c do_conv.c \ - do_fpar.c do_incdec.c do_intar.c do_load.c do_logic.c do_misc.c \ - do_proc.c do_ptrar.c do_sets.c do_store.c do_unsar.c dump.c \ - disassemble.c fra.c global.c init.c io.c log.c m_ioctl.c m_sigtrp.c \ - main.c moncalls.c monstruct.c proctab.c read.c rsb.c segment.c \ - stack.c switch.c tally.c text.c trap.c warn.c - -OBJ = alloc.o core.o data.o do_array.o do_branch.o do_comp.o do_conv.o \ - do_fpar.o do_incdec.o do_intar.o do_load.o do_logic.o do_misc.o \ - do_proc.o do_ptrar.o do_sets.o do_store.o do_unsar.o dump.o \ - disassemble.o fra.o global.o init.o io.o log.o m_ioctl.o m_sigtrp.o \ - main.o moncalls.o monstruct.o proctab.o read.o rsb.o segment.o \ - stack.o switch.o tally.o text.o trap.o warn.o - -HDR = alloc.h fra.h global.h linfil.h log.h mem.h memdirect.h monstruct.h \ - opcode.h proctab.h read.h rsb.h shadow.h text.h trap.h \ - logging.h debug.h nofloat.h segcheck.h sysidf.h v7ioctl.h \ - e.out.h# should be in $(EM)/h or so, or in $(EM/h/em_abs.h - -.SUFFIXES: .o -.c.o: - $(CC) $(CFLAGS) $(IDIRS) -c $< - - -# Main entries -all: test - -install: $(INT) - cp $(INT) $(EM)/bin/int - cp int.1 $(EM)/man/int.1 - -cmp: $(INT) - -cmp $(INT) $(EM)/bin/int - -cmp int.1 $(EM)/man/int.1 - -test: $(INT) test/awa.em22 test/awa.em24 test/awa.em44 - @rm -f int.mess - -echo 3 5 7 2 -1 | time $(INT) test/awa.em22 - cat int.mess - @rm -f int.mess - -echo 3 5 7 2 -1 | time $(INT) test/awa.em24 - cat int.mess - @rm -f int.mess - -echo 3 5 7 2 -1 | time $(INT) test/awa.em44 - cat int.mess - -$(INT): $(OBJ) Makefile - $(CC) $(LFLAGS) -o $(INT) $(OBJ) - @size $(INT) - - -# Generated files -trap_msg: M.trap_msg $(TRAPS) - M.trap_msg $(TRAPS) - -warn_msg: M.warn_msg $(APP_A) - M.warn_msg $(APP_A) - -warn.h: M.warn_h $(APP_A) - M.warn_h $(APP_A) - -switch/DoCases: - (cd switch; make DoCases) - -switch/PrCases: - (cd switch; make PrCases) - -test/awa.em22: - (cd test; make awa.em22) - -test/awa.em24: - (cd test; make awa.em24) - -test/awa.em44: - (cd test; make awa.em44) - - -# Auxiliary entries -lint: $(SRC) trap_msg warn_msg warn.h switch/DoCases switch/PrCases - $(LINT) $(LINTFLAGS) $(IDIRS) $(SRC) -lc - -tags: $(HDR) $(SRC) - ctags $(HDR) $(SRC) - -MFILES = M.trap_msg M.warn_h M.warn_msg - -ALL = READ_ME Makefile $(MFILES) $(HDR) $(SRC) -DISTR = $(ALL) int.1 switch test - -print: - @pr $(ALL) - -pr: print - -opr: - make pr | opr - -distr: .distr - (cd switch; make distr) - (cd test; make distr) - -.distr: Makefile - echo $(DISTR) | tr ' ' '\012' >.distr - -clean: - rm -f core mon.out int.mess int.log int.core int.tally \ - trap_msg warn_msg warn.h tags print \ - $(OBJ) $(INT) - (cd switch; make clean) - (cd test; make clean) - -bare: clean - (cd switch; make bare) - - -#---------------------------------------------------------------- -alloc.o: alloc.h debug.h global.h -core.o: fra.h global.h logging.h shadow.h -data.o: alloc.h global.h log.h logging.h mem.h memdirect.h nofloat.h shadow.h trap.h warn.h -disassemble.o: alloc.h global.h memdirect.h opcode.h proctab.h switch/PrCases -do_array.o: fra.h global.h log.h logging.h mem.h text.h trap.h -do_branch.o: fra.h global.h log.h logging.h mem.h text.h trap.h warn.h -do_comp.o: fra.h global.h log.h logging.h mem.h nofloat.h shadow.h text.h trap.h warn.h -do_conv.o: fra.h global.h log.h logging.h mem.h nofloat.h text.h trap.h warn.h -do_fpar.o: fra.h global.h log.h logging.h mem.h nofloat.h text.h trap.h warn.h -do_incdec.o: fra.h global.h log.h logging.h mem.h nofloat.h text.h trap.h warn.h -do_intar.o: fra.h global.h log.h logging.h mem.h text.h trap.h warn.h -do_load.o: fra.h global.h log.h logging.h mem.h rsb.h text.h trap.h warn.h -do_logic.o: fra.h global.h log.h logging.h mem.h shadow.h text.h trap.h warn.h -do_misc.o: fra.h global.h linfil.h log.h logging.h mem.h memdirect.h read.h rsb.h shadow.h text.h trap.h warn.h -do_proc.o: fra.h global.h linfil.h log.h logging.h mem.h memdirect.h proctab.h rsb.h shadow.h text.h trap.h warn.h -do_ptrar.o: fra.h global.h log.h logging.h mem.h segcheck.h text.h trap.h warn.h -do_sets.o: fra.h global.h log.h logging.h mem.h text.h trap.h -do_store.o: fra.h global.h log.h logging.h mem.h text.h trap.h warn.h -do_unsar.o: fra.h global.h log.h logging.h mem.h text.h trap.h warn.h -dump.o: fra.h global.h linfil.h log.h logging.h mem.h memdirect.h proctab.h rsb.h shadow.h text.h -fra.o: alloc.h fra.h global.h logging.h mem.h shadow.h -global.o: global.h -init.o: alloc.h global.h log.h logging.h mem.h read.h shadow.h trap.h warn.h -io.o: global.h linfil.h logging.h mem.h -log.o: global.h linfil.h logging.h -m_ioctl.o: global.h mem.h sysidf.h v7ioctl.h warn.h -m_sigtrp.o: global.h log.h logging.h trap.h warn.h -main.o: e.out.h global.h log.h logging.h nofloat.h opcode.h read.h rsb.h text.h trap.h warn.h -moncalls.o: alloc.h global.h log.h logging.h mem.h shadow.h sysidf.h trap.h warn.h -monstruct.o: global.h mem.h monstruct.h sysidf.h v7ioctl.h -proctab.o: alloc.h global.h log.h logging.h proctab.h -read.o: e.out.h global.h log.h logging.h mem.h nofloat.h read.h shadow.h text.h warn.h -rsb.o: global.h linfil.h logging.h mem.h proctab.h rsb.h shadow.h warn.h -segment.o: alloc.h global.h mem.h segcheck.h -stack.o: alloc.h global.h log.h logging.h mem.h memdirect.h nofloat.h rsb.h shadow.h trap.h warn.h -switch.o: global.h opcode.h switch/DoCases text.h trap.h warn.h -tally.o: alloc.h global.h linfil.h -text.o: alloc.h global.h proctab.h read.h text.h trap.h warn.h -trap.o: fra.h global.h linfil.h log.h logging.h mem.h rsb.h shadow.h trap.h trap_msg warn.h -warn.o: alloc.h global.h linfil.h log.h logging.h warn.h warn_msg diff --git a/util/int/switch/Makefile b/util/int/switch/Makefile deleted file mode 100644 index 25aa6188e..000000000 --- a/util/int/switch/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -# $Header$ - -EM = ../../.. -IP_SPEC = $(EM)/etc/ip_spec.t -CFLAGS = -I$(EM) - -SRC = mkiswitch.c mkswitch.c -OBJ = mkiswitch.o mkswitch.o - -mkiswitch: mkiswitch.o - $(CC) -o mkiswitch mkiswitch.o $(EM)/lib/em_data.a - -mkswitch: mkswitch.o - $(CC) -o mkswitch mkswitch.o - -DoCases: mkiswitch $(IP_SPEC) - mkiswitch Do $(IP_SPEC) DoCases - wc DoCases - -PrCases: mkswitch $(IP_SPEC) - mkswitch Pr $(IP_SPEC) PrCases - wc PrCases - -lint: - lint $(SRC) - -distr: .distr - -.distr: Makefile - echo READ_ME Makefile $(SRC) | tr ' ' '\012' >.distr - -.SUFFIXES: .o -.c.o: - $(CC) $(CFLAGS) -c $< - -clean: # NOT the cases files ! - rm -f a.out core $(OBJ) mkswitch mkiswitch - -bare: clean - rm -f DoCases PrCases - -all: mkswitch - -install: - echo "Nothing to install" - -cmp: - echo "Nothing to compare" - -pr: - @pr READ_ME Makefile $(SRC) - -opr: - make pr | opr diff --git a/util/int/test/Makefile b/util/int/test/Makefile deleted file mode 100644 index 0bf41bb9d..000000000 --- a/util/int/test/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -# $Header$ - -EM = ../../..# # EM tree - -.SUFFIXES: .em22 .em24 .em44 - -.c.em22: - $(EM)/bin/em22 $*.c -o $*.em22 - -.p.em22: - $(EM)/bin/em22 $*.p -o $*.em22 - -.c.em24: - $(EM)/bin/em24 $*.c -o $*.em24 - -.p.em24: - $(EM)/bin/em24 $*.p -o $*.em24 - -.c.em44: - $(EM)/bin/em44 $*.c -o $*.em44 - -.p.em44: - $(EM)/bin/em44 $*.p -o $*.em44 - -clean: - rm -f e.out core mon.out int.mess int.log int.core int.tally \ - *.k *.m *.o *.s *.em?? a.out - -distr: .distr - -.distr: - echo *.[cp] Makefile READ_ME | tr ' ' '\012' > .distr - -all install cmp pr opr: diff --git a/util/led/Makefile b/util/led/Makefile deleted file mode 100644 index b0feaf800..000000000 --- a/util/led/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# -# Author: L.J. Bekema @ VU Informatica, Amsterdam -# - -# Definitions for the making programs. - -EMHOME = ../.. -LIBDIR= $(EMHOME)/lib -MODLIBDIR = $(EMHOME)/modules/lib -PREFLAGS= -I$(EMHOME)/h -DNDEBUG -DNASSERT -CFLAGS = $(PREFLAGS) -O -LDFLAGS = -LDLIBS = $(MODLIBDIR)/libstring.a $(MODLIBDIR)/libobject.a -LINTFLAGS=-phbxa $(PREFLAGS) -PR = pr -PRFLAGS = - -# Some convenient macro definitions. - -CFILES = archive.c error.c extract.c finish.c main.c memory.c\ - output.c read.c relocate.c save.c scan.c sym.c write.c -HFILES = assert.h const.h debug.h defs.h memory.h orig.h scan.h -OFILES = archive.o error.o extract.o finish.o main.o memory.o\ - output.o read.o relocate.o save.o scan.o sym.o write.o - -# Things that can be made. - -led: $(OFILES) - $(CC) $(LDFLAGS) $(OFILES) $(LDLIBS) -o led - -install:led - rm -f $(LIBDIR)/em_led $(EMHOME)/man/led.6 $(EMHOME)/man/ack.out.5 - cp led $(LIBDIR)/em_led - cp led.6 $(EMHOME)/man/led.6 - cp ack.out.5 $(EMHOME)/man/ack.out.5 - -cmp: led - cmp led $(LIBDIR)/em_led - -lint: - lint $(LINTFLAGS) $(CFILES) - -pr: $(CFILES) $(HFILES) mach.c - $(PR) $(PRFLAGS) $? - @touch pr -opr: - make pr | opr - -clean: - rm -f Out *.o led nohup.out - -depend: - makedepend $(CFILES) - -# The next lines are generated automatically. -# AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO -archive.o: const.h -archive.o: debug.h -archive.o: defs.h -archive.o: memory.h -error.o: const.h -extract.o: const.h -extract.o: debug.h -extract.o: defs.h -extract.o: memory.h -extract.o: orig.h -extract.o: scan.h -finish.o: const.h -finish.o: defs.h -finish.o: memory.h -finish.o: orig.h -finish.o: scan.h -main.o: const.h -main.o: debug.h -main.o: defs.h -main.o: memory.h -main.o: orig.h -memory.o: assert.h -memory.o: const.h -memory.o: debug.h -memory.o: mach.c -memory.o: memory.h -output.o: const.h -output.o: memory.h -read.o: assert.h -read.o: const.h -relocate.o: const.h -relocate.o: debug.h -relocate.o: defs.h -relocate.o: orig.h -save.o: assert.h -save.o: const.h -save.o: memory.h -scan.o: assert.h -scan.o: const.h -scan.o: memory.h -scan.o: scan.h -sym.o: const.h -sym.o: memory.h -write.o: assert.h -write.o: const.h -write.o: memory.h -write.o: orig.h diff --git a/util/led/READ_ME b/util/led/READ_ME deleted file mode 100644 index e612fa34b..000000000 --- a/util/led/READ_ME +++ /dev/null @@ -1,600 +0,0 @@ -You may want to change mach.c in this directory. - -Archives MUST have a table of contents. Arch in subdirectory arch -automatically makes one when you change an archive. - -Several changes in the assembler were needed to have it generate the -necessary output. -A contextual diff follows. You can apply them as follows: -patch -d /usr/em/philips/mach/68000/as < READ_ME - -*** comm0.h.old Thu Dec 6 16:18:39 1984 ---- comm0.h Thu Dec 6 17:49:51 1984 -*************** -*** 213,218 - - /* - * extra type bits out of S_ETC, internal use only - * S_COM: - * - symbols declared by .comm - * S_VAR: - ---- 213,219 ----- - - /* - * extra type bits out of S_ETC, internal use only -+ #ifndef DUK - * S_COM: - * - symbols declared by .comm - #endif DUK -*************** -*** 215,220 - * extra type bits out of S_ETC, internal use only - * S_COM: - * - symbols declared by .comm - * S_VAR: - * - type not known at end of PASS_1 (S_VAR|S_UND) - * - value not known at end of PASS_2 (S_VAR|S_ABS) - ---- 216,222 ----- - #ifndef DUK - * S_COM: - * - symbols declared by .comm -+ #endif DUK - * S_VAR: - * - type not known at end of PASS_1 (S_VAR|S_UND) - * - value not known at end of PASS_2 (S_VAR|S_ABS) -*************** -*** 221,226 - * S_DOT: - * - dot expression - */ - #define S_COM 0x0100 - #define S_VAR 0x0200 - #define S_DOT 0x0400 - ---- 223,229 ----- - * S_DOT: - * - dot expression - */ -+ #ifndef DUK - #define S_COM 0x0100 - #endif DUK - #define S_VAR 0x0200 -*************** -*** 222,227 - * - dot expression - */ - #define S_COM 0x0100 - #define S_VAR 0x0200 - #define S_DOT 0x0400 - /* should be tested by preprocessor - ---- 225,231 ----- - */ - #ifndef DUK - #define S_COM 0x0100 -+ #endif DUK - #define S_VAR 0x0200 - #define S_DOT 0x0400 - /* should be tested by preprocessor -*** comm2.y.old Thu Dec 6 16:19:07 1984 ---- comm2.y Thu Dec 6 16:02:19 1984 -*************** -*** 229,234 - { - #ifdef RELOCATION - if (rflag != 0 && PASS_RELO) - newrelo($1.typ, (int)$0); - #endif - emitx($1.val, (int)$0); - ---- 229,239 ----- - { - #ifdef RELOCATION - if (rflag != 0 && PASS_RELO) -+ #ifdef DUK -+ newrelo($1.typ, -+ (int)$0 | RELBR | RELWR -+ ); -+ #else DUK - newrelo($1.typ, (int)$0); - #endif DUK - #endif -*************** -*** 230,235 - #ifdef RELOCATION - if (rflag != 0 && PASS_RELO) - newrelo($1.typ, (int)$0); - #endif - emitx($1.val, (int)$0); - } - ---- 235,241 ----- - ); - #else DUK - newrelo($1.typ, (int)$0); -+ #endif DUK - #endif - emitx($1.val, (int)$0); - } -*************** -*** 237,242 - { - #ifdef RELOCATION - if (rflag != 0 && PASS_RELO) - newrelo($3.typ, (int)$0); - #endif - emitx($3.val, (int)$0); - ---- 243,253 ----- - { - #ifdef RELOCATION - if (rflag != 0 && PASS_RELO) -+ #ifdef DUK -+ newrelo($3.typ, -+ (int)$0 | RELBR | RELWR -+ ); -+ #else DUK - newrelo($3.typ, (int)$0); - #endif DUK - #endif -*************** -*** 238,243 - #ifdef RELOCATION - if (rflag != 0 && PASS_RELO) - newrelo($3.typ, (int)$0); - #endif - emitx($3.val, (int)$0); - } - ---- 249,255 ----- - ); - #else DUK - newrelo($3.typ, (int)$0); -+ #endif DUK - #endif - emitx($3.val, (int)$0); - } -*** comm3.c.old Wed Jul 11 09:22:24 1984 ---- comm3.c Fri Dec 7 13:06:26 1984 -*************** -*** 11,16 - - struct outhead outhead = { - O_MAGIC, O_STAMP, 0 - #ifdef BYTES_REVERSED - | HF_BREV - #endif - ---- 11,17 ----- - - struct outhead outhead = { - O_MAGIC, O_STAMP, 0 -+ #ifndef DUK - #ifdef BYTES_REVERSED - | HF_BREV - #endif -*************** -*** 17,22 - #ifdef WORDS_REVERSED - | HF_WREV - #endif - }; - - #include "y.tab.h" - ---- 18,24 ----- - #ifdef WORDS_REVERSED - | HF_WREV - #endif -+ #endif DUK - }; - - #include "y.tab.h" -*** comm5.c.old Thu Dec 6 16:19:40 1984 ---- comm5.c Thu Oct 11 14:03:27 1984 -*************** -*** 162,167 - #endif - case STRING: - p = stringbuf; - *p++ = n = getc(tempfile); break; - case OP_EQ: - case OP_NE: - ---- 162,172 ----- - #endif - case STRING: - p = stringbuf; -+ #ifdef DUK -+ *p++ = n = getc(tempfile); -+ p[n] = '\0'; -+ break; -+ #else DUK - *p++ = n = getc(tempfile); break; - #endif DUK - case OP_EQ: -*************** -*** 163,168 - case STRING: - p = stringbuf; - *p++ = n = getc(tempfile); break; - case OP_EQ: - case OP_NE: - case OP_LE: - ---- 168,174 ----- - break; - #else DUK - *p++ = n = getc(tempfile); break; -+ #endif DUK - case OP_EQ: - case OP_NE: - case OP_LE: -*************** -*** 354,359 - break; - if (c == '\\') - c = inescape(); - if (p >= &stringbuf[STRINGMAX]) - fatal("string buffer overflow"); - *p++ = c; - ---- 360,368 ----- - break; - if (c == '\\') - c = inescape(); -+ #ifdef DUK -+ if (p >= &stringbuf[STRINGMAX - 1]) -+ #else DUK - if (p >= &stringbuf[STRINGMAX]) - #endif DUK - fatal("string buffer overflow"); -*************** -*** 355,360 - if (c == '\\') - c = inescape(); - if (p >= &stringbuf[STRINGMAX]) - fatal("string buffer overflow"); - *p++ = c; - } - ---- 364,370 ----- - if (p >= &stringbuf[STRINGMAX - 1]) - #else DUK - if (p >= &stringbuf[STRINGMAX]) -+ #endif DUK - fatal("string buffer overflow"); - *p++ = c; - } -*************** -*** 359,364 - *p++ = c; - } - stringbuf[0] = p - stringbuf - 1; - return(STRING); - } - - ---- 369,377 ----- - *p++ = c; - } - stringbuf[0] = p - stringbuf - 1; -+ #ifdef DUK -+ *p = '\0'; -+ #endif DUK - return(STRING); - } - -*** comm6.c.old Thu Dec 6 16:20:22 1984 ---- comm6.c Wed Oct 3 15:59:31 1984 -*************** -*** 106,111 - sp = §[typ - S_MIN]; - sp->s_item = ip; - sp->s_lign = ALIGNSECT; - ip->i_type = typ | S_EXT; - ip->i_valu = 0; - } else if (typ >= S_MIN) { - ---- 106,114 ----- - sp = §[typ - S_MIN]; - sp->s_item = ip; - sp->s_lign = ALIGNSECT; -+ #ifdef DUK -+ ip->i_type = typ; -+ #else DUK - ip->i_type = typ | S_EXT; - #endif DUK - ip->i_valu = 0; -*************** -*** 107,112 - sp->s_item = ip; - sp->s_lign = ALIGNSECT; - ip->i_type = typ | S_EXT; - ip->i_valu = 0; - } else if (typ >= S_MIN) { - sp = §[typ - S_MIN]; - ---- 110,116 ----- - ip->i_type = typ; - #else DUK - ip->i_type = typ | S_EXT; -+ #endif DUK - ip->i_valu = 0; - } else if (typ >= S_MIN) { - sp = §[typ - S_MIN]; -*************** -*** 180,185 - * for possible relocation - */ - ip->i_valu = outhead.oh_nname; - newsymb(ip->i_name, S_EXT|DOTTYP, (short)0, val); - #endif - } - ---- 184,192 ----- - * for possible relocation - */ - ip->i_valu = outhead.oh_nname; -+ #ifdef DUK -+ newsymb(ip->i_name, S_COM|S_EXT|DOTTYP, (short)0, val); -+ #else DUK - newsymb(ip->i_name, S_EXT|DOTTYP, (short)0, val); - #endif DUK - #endif -*************** -*** 181,186 - */ - ip->i_valu = outhead.oh_nname; - newsymb(ip->i_name, S_EXT|DOTTYP, (short)0, val); - #endif - } - - ---- 188,194 ----- - newsymb(ip->i_name, S_COM|S_EXT|DOTTYP, (short)0, val); - #else DUK - newsymb(ip->i_name, S_EXT|DOTTYP, (short)0, val); -+ #endif DUK - #endif - } - -*************** -*** 255,260 - short s; - { - struct outrelo outrelo; - - if (rflag == 0) - return; - ---- 263,271 ----- - short s; - { - struct outrelo outrelo; -+ #ifdef DUK -+ int iscomm; -+ #endif DUK - - if (rflag == 0) - return; -*************** -*** 272,277 - * b=a - * a: .data2 0 - */ - s &= ~S_COM; - if ((n & RELPC) == 0 && s == S_ABS) - return; - ---- 283,291 ----- - * b=a - * a: .data2 0 - */ -+ #ifdef DUK -+ iscomm = s & S_COM; -+ #endif DUK - s &= ~S_COM; - if ((n & RELPC) == 0 && s == S_ABS) - return; -*************** -*** 285,290 - outrelo.or_type = (char)n; - outrelo.or_sect = (char)DOTTYP; - #ifndef ASLD - if (s == S_UND) { - assert(relonami != 0); - outrelo.or_nami = relonami-1; - ---- 299,307 ----- - outrelo.or_type = (char)n; - outrelo.or_sect = (char)DOTTYP; - #ifndef ASLD -+ #ifdef DUK -+ if (s == S_UND || iscomm) { -+ #else DUK - if (s == S_UND) { - #endif DUK - assert(relonami != 0); -*************** -*** 286,291 - outrelo.or_sect = (char)DOTTYP; - #ifndef ASLD - if (s == S_UND) { - assert(relonami != 0); - outrelo.or_nami = relonami-1; - relonami = 0; - ---- 303,309 ----- - if (s == S_UND || iscomm) { - #else DUK - if (s == S_UND) { -+ #endif DUK - assert(relonami != 0); - outrelo.or_nami = relonami-1; - relonami = 0; -*** comm7.c.old Thu Dec 6 16:20:50 1984 ---- comm7.c Wed Oct 3 16:35:31 1984 -*************** -*** 19,24 - return(ip->i_valu); - return(ip->i_valu + sect[typ].s_base); - #else - if ((ip->i_type & S_TYP) == S_UND) { - if (pass == PASS_3) { - if (relonami != 0) - ---- 19,27 ----- - return(ip->i_valu); - return(ip->i_valu + sect[typ].s_base); - #else -+ #ifdef DUK -+ if ((ip->i_type & S_TYP) == S_UND || (ip->i_type & S_COM)) { -+ #else DUK - if ((ip->i_type & S_TYP) == S_UND) { - #endif DUK - if (pass == PASS_3) { -*************** -*** 20,25 - return(ip->i_valu + sect[typ].s_base); - #else - if ((ip->i_type & S_TYP) == S_UND) { - if (pass == PASS_3) { - if (relonami != 0) - serror("relocation error"); - ---- 23,29 ----- - if ((ip->i_type & S_TYP) == S_UND || (ip->i_type & S_COM)) { - #else DUK - if ((ip->i_type & S_TYP) == S_UND) { -+ #endif DUK - if (pass == PASS_3) { - if (relonami != 0) - serror("relocation error"); -*** mach0.c.old Thu Dec 6 16:21:11 1984 ---- mach0.c Fri Sep 14 14:15:54 1984 -*************** -*** 1,3 - /* @(#)mach0.c 1.5 */ - /* - * Motorola 68000/68010 options - ---- 1,4 ----- -+ #define DUK - /* @(#)mach0.c 1.5 */ - /* - * Motorola 68000/68010 options -*** mach4.c.old Thu Dec 6 16:21:30 1984 ---- mach4.c Thu Dec 6 16:05:00 1984 -*************** -*** 21,26 - fit(fitw($4.val)); - emit2($1 | $2); - #ifdef RELOCATION - newrelo($4.typ, RELPC|RELO2); - #endif - emit2(loww($4.val)); - ---- 21,29 ----- - fit(fitw($4.val)); - emit2($1 | $2); - #ifdef RELOCATION -+ #ifdef DUK -+ newrelo($4.typ, RELPC|RELO2|RELBR|RELWR); -+ #else DUK - newrelo($4.typ, RELPC|RELO2); - #endif DUK - #endif -*************** -*** 22,27 - emit2($1 | $2); - #ifdef RELOCATION - newrelo($4.typ, RELPC|RELO2); - #endif - emit2(loww($4.val)); - } - ---- 25,31 ----- - newrelo($4.typ, RELPC|RELO2|RELBR|RELWR); - #else DUK - newrelo($4.typ, RELPC|RELO2); -+ #endif DUK - #endif - emit2(loww($4.val)); - } -*** mach5.c.old Thu Dec 6 16:21:54 1984 ---- mach5.c Thu Dec 6 16:07:05 1984 -*************** -*** 37,42 - #ifdef RELOCATION - RELOMOVE(relonami, rel_1); - if (flag & ~0xFF) - newrelo(exp_1.typ, flag>>8); - #endif - if (flag & PUTL) - ---- 37,45 ----- - #ifdef RELOCATION - RELOMOVE(relonami, rel_1); - if (flag & ~0xFF) -+ #ifdef DUK -+ newrelo(exp_1.typ, (flag>>8) | RELBR | RELWR); -+ #else DUK - newrelo(exp_1.typ, flag>>8); - #endif DUK - #endif -*************** -*** 38,43 - RELOMOVE(relonami, rel_1); - if (flag & ~0xFF) - newrelo(exp_1.typ, flag>>8); - #endif - if (flag & PUTL) - emit4(exp_1.val); - ---- 41,47 ----- - newrelo(exp_1.typ, (flag>>8) | RELBR | RELWR); - #else DUK - newrelo(exp_1.typ, flag>>8); -+ #endif DUK - #endif - if (flag & PUTL) - emit4(exp_1.val); -*************** -*** 357,362 - fit(fitw(exp.val)); - emit2(opc); - #ifdef RELOCATION - newrelo(exp.typ, RELPC|RELO2); - #endif - emit2(loww(exp.val)); - ---- 361,369 ----- - fit(fitw(exp.val)); - emit2(opc); - #ifdef RELOCATION -+ #ifdef DUK -+ newrelo(exp.typ, RELPC|RELO2|RELBR|RELWR); -+ #else DUK - newrelo(exp.typ, RELPC|RELO2); - #endif DUK - #endif -*************** -*** 358,363 - emit2(opc); - #ifdef RELOCATION - newrelo(exp.typ, RELPC|RELO2); - #endif - emit2(loww(exp.val)); - } - ---- 365,371 ----- - newrelo(exp.typ, RELPC|RELO2|RELBR|RELWR); - #else DUK - newrelo(exp.typ, RELPC|RELO2); -+ #endif DUK - #endif - emit2(loww(exp.val)); - } diff --git a/util/led/byte_order.c b/util/led/byte_order.c deleted file mode 100644 index 08120b0bc..000000000 --- a/util/led/byte_order.c +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef lint -static char rcsid[] = "$Header$"; -#endif lint - -#include "const.h" -#include "assert.h" - -bool bytes_reversed = FALSE; -bool words_reversed = FALSE; - -/* - * Determine the byte/word order in shorts/longs, assuming the size of a short - * is 2 chars, and the size of a long is 4 chars. Not all theoretical - * possibilities are tested; only bytes reversed and/or words reversed. - */ -determine_ordering() -{ - short s; - long l; - register char *cp; - register short *sp; - - cp = (char *)&s; - cp[0] = 0x01; cp[1] = 0x02; - if (s != 0x01 + (0x02 << 8)) - bytes_reversed = TRUE; - sp = (short *)&l; - sp[0] = 0x0001; sp[1] = 0x0002; - if (l != 0x0001 + (0x0002L << 16)) - words_reversed = TRUE; -} - -/* - * `Format' is a string of digits indicating how many bytes must be taken - * from `buf' to form an integer of some type. E.g. if the digit is '2', two - * bytes are taken to form a short. - */ -swap(buf, format) - register char *buf; - register char *format; -{ - register char savebyte; - - while (*format) { - switch (*format++) { - case '1': - buf += 1; - break; - case '2': - if (bytes_reversed) { - savebyte = buf[0]; - buf[0] = buf[1]; - buf[1] = savebyte; - } - buf += 2; - break; - case '4': - /* - * Written out to save recursive calls. - */ - if (bytes_reversed && words_reversed) { - savebyte = buf[0]; - buf[0] = buf[3]; - buf[3] = savebyte; - savebyte = buf[1]; - buf[1] = buf[2]; - buf[2] = savebyte; - } else if (bytes_reversed) { - savebyte = buf[0]; - buf[0] = buf[1]; - buf[1] = savebyte; - savebyte = buf[2]; - buf[2] = buf[3]; - buf[3] = savebyte; - } else if (words_reversed) { - savebyte = buf[0]; - buf[0] = buf[2]; - buf[2] = savebyte; - savebyte = buf[1]; - buf[1] = buf[3]; - buf[3] = savebyte; - } - buf += 4; - break; - default: - assert(FALSE); - break; - } - } -} diff --git a/util/led/makedepend b/util/led/makedepend deleted file mode 100755 index 3726c27b3..000000000 --- a/util/led/makedepend +++ /dev/null @@ -1,23 +0,0 @@ -: 'Without arguments, this program clears the dependencies between' -: '.o files and included files in Makefile.' -: 'With arguments, it replaces the dependencies between the .o files' -: 'resulting from the argument files, and the included files in Makefile.' -: 'Makefile must contain a line with on it the pattern AUTOAUTOAUTO.' -: 'WARNING: a temporary file is created in the current directory.' -: 'It is however rather unlikely that this file already exists' -grep -s AUTOAUTOAUTO Makefile || { - echo "Makefile has wrong format." 1>&2 - exit 1 -} -for file do - ofile=`echo $file | sed 's/.$/o/'` - grep '^# *include.*"' $file | sed "s/.*\"\(.*\)\".*/$ofile: \1/" -done | sort -u > @@**##$$ -echo "Non-empty line." >> Makefile -ed - Makefile <<'!' -/AUTOAUTOAUTO/+,$d -w -q -! -cat @@**##$$ >> Makefile -rm -f @@**##$$ diff --git a/util/misc/Makefile b/util/misc/Makefile deleted file mode 100644 index 143555c31..000000000 --- a/util/misc/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -# $Header$ - -EMHOME=../.. -h=$(EMHOME)/h -l=$(EMHOME)/lib -ml=$(EMHOME)/modules/lib -mh=$(EMHOME)/modules/h - -DEC_PATH=decode -ENC_PATH=encode -DATA_PATH=$l/em_data.a -DECLIBS=$(ml)/libread_emkV.a $(ml)/libeme.a $(ml)/liballoc.a $(ml)/libprint.a $(ml)/libstring.a \ - $(ml)/libsystem.a -ENCLIBS=$(ml)/libread_emeV.a $(ml)/libemk.a $(ml)/liballoc.a $(ml)/libprint.a $(ml)/libstring.a \ - $(ml)/libsystem.a -HFILES=$h/em_mnem.h $h/em_spec.h $h/em_pseu.h $h/em_flag.h $h/em_ptyp.h \ - $h/em_mes.h $(mh)/em.h $(mh)/em_comp.h - -CFLAGS=-O -I$(mh) -I$h -LDFLAGS = - -all: $(DEC_PATH) $(ENC_PATH) esize - -$(DEC_PATH): decode.o $(DATA_PATH) - $(CC) $(LDFLAGS) -o $(DEC_PATH) decode.o $(DECLIBS) $(DATA_PATH) - -$(ENC_PATH): encode.o $(DATA_PATH) - $(CC) $(LDFLAGS) -o $(ENC_PATH) encode.o $(ENCLIBS) $(DATA_PATH) - -esize: esize.o - $(CC) -o esize esize.o - -convert.o: $(HFILES) - -encode.o: convert.o - cp convert.o encode.o - -decode.o: convert.o - cp convert.o decode.o - -clean: - rm -f $(DEC_PATH) $(ENC_PATH) esize *.o *.old - -install : all - rm -f $l/em_$(DEC_PATH) $l/em_$(ENC_PATH) $(EMHOME)/bin/esize $(EMHOME)/man/em_decode.6 $(EMHOME)/man/esize.1 - cp $(DEC_PATH) $l/em_$(DEC_PATH) - cp $(ENC_PATH) $l/em_$(ENC_PATH) - cp esize $(EMHOME)/bin/esize - cp em_decode.6 $(EMHOME)/man/em_decode.6 - cp esize.1 $(EMHOME)/man/esize.1 - -cmp : all - -cmp $(DEC_PATH) $l/em_$(DEC_PATH) - -cmp $(ENC_PATH) $l/em_$(ENC_PATH) - -cmp esize $(EMHOME)/bin/esize - -cmp em_decode.6 $(EMHOME)/man/em_decode.6 - -cmp esize.1 $(EMHOME)/man/esize.1 - -opr: - make pr ^ opr -pr: - @pr -n Makefile convert.c esize.c diff --git a/util/misc/decode.c b/util/misc/decode.c deleted file mode 100644 index 559505465..000000000 --- a/util/misc/decode.c +++ /dev/null @@ -1,499 +0,0 @@ -/* - * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. - * - * This product is part of the Amsterdam Compiler Kit. - * - * Permission to use, sell, duplicate or disclose this software must be - * obtained in writing. Requests for such permissions may be sent to - * - * Dr. Andrew S. Tanenbaum - * Wiskundig Seminarium - * Vrije Universiteit - * Postbox 7161 - * 1007 MC Amsterdam - * The Netherlands - * - */ - -#ifndef NORCSID -static char rcsid[] = "$Header$"; -#endif - -/* - * Decode compact EM assembly language - * - * Author: Johan Stevenson, Vrije Universiteit, Amsterdam - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define get8() ((unsigned)getchar()) - -#define check(x) if (!(x)) fail_check() - -#define MAXSTR 256 - -/* - * global variables - */ - -int opcode; -int offtyp; -long argval; -int dlbval; -char string[MAXSTR]; -int strsiz; - -int wsize; -int psize; -int lineno; -int argnum; -int errors; -char *progname; -char *filename; - -long wordmask[] = { /* allowed bits in a word */ - 0x00000000, - 0x000000FF, - 0x0000FFFF, - 0x00000000, - 0xFFFFFFFF -}; - -long sizemask[] = { /* allowed bits in multiples of 'wsize' */ - 0x00000000, - 0x7FFFFFFF, - 0x7FFFFFFE, - 0x00000000, - 0x7FFFFFFC -}; - -/* - * external tables - */ - -extern char em_flag[]; -extern short em_ptyp[]; -extern char em_mnem[][4]; -extern char em_pseu[][4]; - -/* - * routines - */ - -int get16(); -long get32(); - -main(argc,argv) char **argv; { - - progname = argv[0]; - if (argc >= 2) { - filename = argv[1]; - if (freopen(argv[1],"r",stdin) == NULL) - fatal("can't open %s",argv[1]); - } - if (argc >= 3) - if (freopen(argv[2],"w",stdout) == NULL) - fatal("can't create %s",argv[2]); - if (get16() != sp_magic) - fatal("bad magic word"); - /* In System III the array is called _ctype[] without the trailing '_' */ - (_ctype_+1)['_'] = (_ctype_+1)['a']; - while (nextline()) - ; - return(errors ? -1 : 0); -} - -/* ----- copy ----- */ - -int nextline() { - register t; - - lineno++; - argnum = 1; - switch (t = table1()) { - case EOF: - return(0); - case sp_fmnem: - instr(); - break; - case sp_fpseu: - pseudo(); - break; - case sp_ilb1: - case sp_ilb2: - argnum = 0; - putarg(sp_cst2); - break; - case sp_dlb1: - case sp_dlb2: - case sp_dnam: - argnum = 0; - putarg(t); - break; - default: - error("unknown opcode %d",t); - } - putchar('\n'); - return(1); -} - -instr() { - register i,j,t; - register long l; - - i = opcode - sp_fmnem; - printf(" %s",em_mnem[i]); - j = em_flag[i] & EM_PAR; - if (j == PAR_NO) - return; - t = em_ptyp[j]; - t = getarg(t); - /* - * range checking - */ - switch (j) { - case PAR_N: - check(argval >= 0); - break; - case PAR_G: - if (t != sp_cst2 && t != sp_cst4) - break; - check(argval >= 0); - /* fall through */ - case PAR_L: - l = argval >= 0 ? argval : -argval; - check((l & ~wordmask[psize]) == 0); - break; - case PAR_W: - if (t == sp_cend) - break; - check((argval & ~wordmask[wsize]) == 0); - /* fall through */ - case PAR_S: - check(argval != 0); - /* fall through */ - case PAR_Z: - check((argval & ~sizemask[wsize]) == 0); - break; - case PAR_O: - check(argval != 0); - check((argval & ~sizemask[wsize])==0 || (wsize % argval)==0); - break; - case PAR_B: - t = sp_ilb2; - break; - case PAR_R: - check(argval >= 0 && argval <= 2); - break; - } - putarg(t); -} - -pseudo() { - register i,t; - - i = opcode; - printf(" %s",em_pseu[i - sp_fpseu]); - switch (i) { - case ps_bss: - case ps_hol: - putarg(getarg(cst_ptyp)); - putarg(getarg(val_ptyp)); - putarg(getarg(ptyp(sp_cst2))); - check(argval==0 || argval==1); - break; - case ps_rom: - case ps_con: - putarg(getarg(val_ptyp)); - while ((t = getarg(any_ptyp)) != sp_cend) - putarg(t); - break; - case ps_mes: - putarg(getarg(ptyp(sp_cst2))); - if (argval == ms_emx) { - putarg(getarg(ptyp(sp_cst2))); - check(argval > 0 && argval <= 4); - wsize = (int) argval; - putarg(getarg(ptyp(sp_cst2))); - check(argval > 0 && argval <= 4); - psize = (int) argval; - } - while ((t = getarg(any_ptyp)) != sp_cend) - putarg(t); - break; - case ps_exa: - case ps_ina: - putarg(getarg(sym_ptyp)); - break; - case ps_exp: - case ps_inp: - putarg(getarg(ptyp(sp_pnam))); - break; - case ps_exc: - putarg(getarg(ptyp(sp_cst2))); - putarg(getarg(ptyp(sp_cst2))); - break; - case ps_pro: - putarg(getarg(ptyp(sp_pnam))); - putarg(getarg(cst_ptyp|ptyp(sp_cend))); - break; - case ps_end: - putarg(getarg(cst_ptyp|ptyp(sp_cend))); - break; - default: - error("bad pseudo %d",i); - } -} - -/* ----- input ----- */ - -int getarg(typset) { - register t,argtyp; - - argtyp = t = table2(); - if (t == EOF) - fatal("unexpected EOF"); - t -= sp_fspec; - assert(t >= 0 && t < 16); - t = 1 << t; - if ((typset & t) == 0) - error("bad argument type %d",argtyp); - return(argtyp); -} - -int table1() { - register i; - - i = get8(); - if (i < sp_fmnem+sp_nmnem && i >= sp_fmnem) { - opcode = i; - return(sp_fmnem); - } - if (i < sp_fpseu+sp_npseu && i >= sp_fpseu) { - opcode = i; - return(sp_fpseu); - } - if (i < sp_filb0+sp_nilb0 && i >= sp_filb0) { - argval = i - sp_filb0; - return(sp_ilb2); - } - return(table3(i)); -} - -int table2() { - register i; - - i = get8(); - if (i < sp_fcst0+sp_ncst0 && i >= sp_fcst0) { - argval = i - sp_zcst0; - return(sp_cst2); - } - return(table3(i)); -} - -int table3(i) { - long consiz; - - switch(i) { - case sp_ilb1: - argval = get8(); - break; - case sp_dlb1: - dlbval = get8(); - break; - case sp_dlb2: - dlbval = get16(); - if ( dlbval<0 ) { - error("illegal data label .%d",dlbval); - dlbval=0 ; - } - break; - case sp_cst2: - argval = get16(); - break; - case sp_ilb2: - argval = get16(); - if ( argval<0 ) { - error("illegal instruction label %ld",argval); - argval=0 ; - } - break; - case sp_cst4: - argval = get32(); - break; - case sp_dnam: - case sp_pnam: - getstring(1); - break; - case sp_scon: - getstring(0); - break; - case sp_doff: - offtyp = getarg(sym_ptyp); - getarg(cst_ptyp); - break; - case sp_icon: - case sp_ucon: - case sp_fcon: - getarg(cst_ptyp); - consiz = (long) argval; - getstring(0); - argval = consiz; - break; - } - return(i); -} - -int get16() { - register int l_byte, h_byte; - - l_byte = get8(); - h_byte = get8(); - if ( h_byte>=128 ) h_byte -= 256 ; - return l_byte | (h_byte*256) ; -} - -long get32() { - register long l; - register int h_byte; - - l = get8(); l |= (unsigned)get8()*256 ; l |= get8()*256L*256L ; - h_byte = get8() ; - if ( h_byte>=128 ) h_byte -= 256 ; - return l | (h_byte*256L*256*256L) ; -} - -getstring(ident) { - register char *p; - register n; - - getarg(cst_ptyp); - if (argval < 0 || argval > MAXSTR) - fatal("string/identifier too long"); - strsiz = n = argval; - p = string; - while (--n >= 0) - *p++ = get8(); - if (ident) { - if (!isascii(string[0]) || !isalpha(string[0])) { - identerror(); - return; - } - for (n=strsiz,p=string+1;--n>0;p++) - if (!isascii(*p) || !isalnum(*p)) { - identerror(); - return; - } - } -} - -/* ----- output ----- */ - -putarg(t) { - - if (argnum != 0) - putchar(argnum == 1 ? ' ' : ','); - argnum++; - puttyp(t); -} - -puttyp(t) { - - switch (t) { - case sp_ilb1: - case sp_ilb2: - printf("*%d",(int) argval); - break; - case sp_dlb1: - case sp_dlb2: - printf(".%d",dlbval); - break; - case sp_dnam: - putstr(0,0); - break; - case sp_cst2: - case sp_cst4: - printf("%ld",argval); - break; - case sp_doff: - puttyp(offtyp); - if (argval >= 0) putchar('+'); - printf("%ld",argval); - break; - case sp_pnam: - putstr('$',0); - break; - case sp_scon: - putstr('\'','\''); - break; - case sp_icon: - putstr(0,'I'); - printf("%ld",argval); - break; - case sp_ucon: - putstr(0,'U'); - printf("%ld",argval); - break; - case sp_fcon: - putstr(0,'F'); - printf("%ld",argval); - break; - case sp_cend: - putchar('?'); - break; - } -} - -putstr(c,c2) register c; { - register char *p; - - if (c) - putchar(c); - p = string; - while (--strsiz >= 0) { - c = *p++ & 0377; - if (c >= 040 && c < 0177) { - if (c == '\'' || c == '\\') - putchar('\\'); - putchar(c); - } else - printf("\\%03o",c); - } - if (c2) - putchar(c2); -} - -/* ----- error handling ----- */ - -fail_check() { - error("argument range error"); -} - -identerror() { - error("'%s' is not a correct identifier",string); -} - -/* VARARGS */ -error(s,a1,a2,a3,a4) char *s; { - fprintf(stderr, - "%s: line %d: ", - filename ? filename : progname, - lineno); - fprintf(stderr,s,a1,a2,a3,a4); - fprintf(stderr,"\n"); - errors++; -} - -/* VARARGS */ -fatal(s,a1,a2,a3,a4) char *s; { - error(s,a1,a2,a3,a4); - exit(-1); -} diff --git a/util/misc/encode.c b/util/misc/encode.c deleted file mode 100644 index 0aee6277e..000000000 --- a/util/misc/encode.c +++ /dev/null @@ -1,761 +0,0 @@ -/* - * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. - * - * This product is part of the Amsterdam Compiler Kit. - * - * Permission to use, sell, duplicate or disclose this software must be - * obtained in writing. Requests for such permissions may be sent to - * - * Dr. Andrew S. Tanenbaum - * Wiskundig Seminarium - * Vrije Universiteit - * Postbox 7161 - * 1007 MC Amsterdam - * The Netherlands - * - */ - -#ifndef NORCSID -static char rcsid[] = "$Header$"; -#endif - -/* - * Encode to compact EM assembly language - * - * Author: Johan Stevenson, Vrije Universiteit, Amsterdam - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define put8(x) putchar(x) - -#define check(x) if (!(x)) fail_check() - -#define fit16i(x) ((x) >= 0xFFFF8000 && (x) <= 0x00007FFF) -#define fit8u(x) ((x) >= 0 && (x) <= 0xFF) - -#define MAXSTR 256 -#define HSIZE 256 -#define EMPTY (EOF-1) - -/* - * global variables - */ - -int opcode; -int offtyp; -long argval; -int dlbval; -char string[MAXSTR]; -int strsiz; - -int wsize; -int psize; -int lineno; -int argnum; -int errors; -char *progname; -char *filename = "INPUT"; - -long wordmask[] = { /* allowed bits in a word */ - 0x00000000, - 0x000000FF, - 0x0000FFFF, - 0x00000000, - 0xFFFFFFFF -}; - -long sizemask[] = { /* allowed bits in multiples of 'wsize' */ - 0x00000000, - 0x7FFFFFFF, - 0x7FFFFFFE, - 0x00000000, - 0x7FFFFFFC -}; - -int peekc = EMPTY; -int hashtab[HSIZE]; -jmp_buf recover; - -/* - * external tables - */ - -extern char em_flag[]; -extern short em_ptyp[]; -extern char em_mnem[][4]; -extern char em_pseu[][4]; - -int main(argc,argv) char **argv; { - - progname = argv[0]; - if (argc >= 2) { - filename = argv[1]; - if (freopen(filename,"r",stdin) == NULL) - fatal("can't open %s",filename); - } - if (argc >= 3) - if (freopen(argv[2],"w",stdout) == NULL) - fatal("can't create %s",argv[2]); - init(); - put16(sp_magic); - setjmp(recover); - while (nextline()) - ; - return(errors ? -1 : 0); -} - -/* ----- copy ----- */ - -int nextline() { - register c,i; - - lineno++; - argnum = 1; - c = nextchar(); - if (c == EOF) - return(0); - if (isspace(c) && c != '\n') { - c = nospace(); - if (isalpha(c)) { - inmnem(c); - if (opcode <= sp_lmnem) - instr(); - else - pseudo(); - } else - peekc = c; - } else if (c == '#') { - line_line(); - } else { - peekc = c; - i = gettyp(sym_ptyp | ptyp(sp_cst2) | ptyp(sp_cend)); - switch (i) { - case sp_cst2: - i = (int) argval; - if (i >= 0 && i < sp_nilb0) - put8(i + sp_filb0); - else - putarg(sp_ilb2); - break; - case sp_dlb2: - case sp_dnam: - putarg(i); - break; - case sp_cend: - break; - } - } - if (nospace() != '\n') - syntax("end of line expected"); - return(1); -} - -instr() { - register i,j,t; - register long l; - - i = opcode; - put8(i); - i -= sp_fmnem; - j = em_flag[i] & EM_PAR; - if (j == PAR_NO) - return; - t = em_ptyp[j]; - if (j == PAR_B) - t = ptyp(sp_ilb2); - t = getarg(t); - /* - * range checking - */ - switch (j) { - case PAR_N: - check(argval >= 0); - break; - case PAR_G: - if (t != sp_cst2 && t != sp_cst4) - break; - check(argval >= 0); - /* fall through */ - case PAR_L: - l = argval >= 0 ? argval : -argval; - check((l & ~wordmask[psize]) == 0); - break; - case PAR_W: - if (t == sp_cend) - break; - check((argval & ~wordmask[wsize]) == 0); - /* fall through */ - case PAR_S: - check(argval != 0); - /* fall through */ - case PAR_Z: - check((argval & ~sizemask[wsize]) == 0); - break; - case PAR_O: - check(argval != 0); - check((argval & ~sizemask[wsize])==0 || (wsize % argval)==0); - break; - case PAR_B: - t = sp_cst2; - break; - case PAR_R: - check(argval >= 0 && argval <= 2); - break; - } - putarg(t); -} - -pseudo() { - register i,t; - - i = opcode; - put8(i); - switch (i) { - case ps_bss: - case ps_hol: - putarg(getarg(cst_ptyp)); - putarg(getarg(val_ptyp)); - putarg(getarg(ptyp(sp_cst2))); - check(argval==0 || argval==1); - break; - case ps_rom: - case ps_con: - putarg(getarg(val_ptyp)); - do - putarg(t = getarg(any_ptyp)); - while (t != sp_cend); - break; - case ps_mes: - putarg(getarg(ptyp(sp_cst2))); - if (argval == ms_emx) { - putarg(getarg(ptyp(sp_cst2))); - check(argval > 0 && argval <= 4); - wsize = (int) argval; - putarg(getarg(ptyp(sp_cst2))); - check(argval > 0 && argval <= 4); - psize = (int) argval; - } - do - putarg(t = getarg(any_ptyp)); - while (t != sp_cend); - break; - case ps_exa: - case ps_ina: - putarg(getarg(sym_ptyp)); - break; - case ps_exp: - case ps_inp: - putarg(getarg(ptyp(sp_pnam))); - break; - case ps_exc: - putarg(getarg(ptyp(sp_cst2))); - putarg(getarg(ptyp(sp_cst2))); - break; - case ps_pro: - putarg(getarg(ptyp(sp_pnam))); - putarg(getarg(cst_ptyp|ptyp(sp_cend))); - break; - case ps_end: - putarg(getarg(cst_ptyp|ptyp(sp_cend))); - break; - default: - syntax("bad pseudo %d",i); - } -} - -/* ----- input ----- */ - -int getarg(typset) { - register c; - - if (argnum != 1) { - c = nospace(); - if (c != ',') { - if (c != '\n') - syntax("comma expected"); - peekc = c; - } - } - argnum++; - return(gettyp(typset)); -} - -int gettyp(typset) { - register c,t,sp; - - c = nospace(); - if (c == '\n') { - peekc = c; - sp = sp_cend; - } else if (isdigit(c) || c == '+' || c == '-' || c == '(') { - sp = inexpr1(c); - if (sp == sp_cst4 && fit16i(argval)) - sp = sp_cst2; - } else if (isalpha(c)) { - inname(c); - sp = offsetted(sp_dnam); - } else if (c == '.') { - in15u(); - dlbval = (int) argval; - sp = offsetted(sp_dlb2); - } else if (c == '*') { - in15u(); - sp = sp_ilb2; - } else if (c == '$') { - inname(nextchar()); - sp = sp_pnam; - } else if (c == '"' || c == '\'') { - sp = instring(c); - } else if (c == '?') { - sp = sp_cend; - } else - syntax("operand expected"); - t = sp - sp_fspec; - assert(t >= 0 && t < 16); - t = 1 << t; - if ((typset & t) == 0) - error("bad argument type %d",sp); - return(sp); -} - -int offsetted(sp) { - register c; - - c = nospace(); - if (c == '+' || c == '-') { - gettyp(cst_ptyp); - if (c == '-') - argval = -argval; - offtyp = sp; - return(sp_doff); - } - peekc = c; - return(sp); -} - -inname(c) register c; { - register char *p; - - if (isalpha(c) == 0) - syntax("letter expected"); - p = string; - do { - if (p < &string[MAXSTR-1]) - *p++ = c; - c = nextchar(); - } while (isalnum(c)); - peekc = c; - *p = '\0'; - strsiz = p - string; -} - -int inmnem(c) register c; { - register unsigned h; - register i; - - inname(c); - h = hash(string); - for (;;) { - h++; - h %= HSIZE; - i = hashtab[h]; - if (i == 0) - syntax("bad mnemonic"); - if (i <= sp_lmnem) { - assert(i >= sp_fmnem); - if (strcmp(string,em_mnem[i - sp_fmnem]) != 0) - continue; - return(opcode = i); - } - assert(i <= sp_lpseu && i >= sp_fpseu); - if (strcmp(string,em_pseu[i - sp_fpseu]) != 0) - continue; - return(opcode = i); - } -} - -int inexpr1(c) register c; { - long left; - - if ((c = inexpr2(c)) != sp_cst4) - return(c); - for (;;) { - c = nospace(); - if (c != '+' && c != '-') { - peekc = c; - break; - } - left = argval; - if (inexpr2(nospace()) != sp_cst4) - syntax("term expected"); - if (c == '+') - argval += left; - else - argval = left - argval; - } - return(sp_cst4); -} - -int inexpr2(c) register c; { - long left; - - if ((c = inexpr3(c)) != sp_cst4) - return(c); - for (;;) { - c = nospace(); - if (c != '*' && c != '/' && c != '%') { - peekc = c; - break; - } - left = argval; - if (inexpr3(nospace()) != sp_cst4) - syntax("factor expected"); - if (c == '*') - argval *= left; - else if (c == '/') - argval = left / argval; - else - argval = left % argval; - } - return(sp_cst4); -} - -inexpr3(c) register c; { - - if (c == '(') { - if (inexpr1(nospace()) != sp_cst4) - syntax("expression expected"); - if (nospace() != ')') - syntax("')' expected"); - return(sp_cst4); - } - return(innumber(c)); -} - -int innumber(c) register c; { - register char *p; - register n; - int expsign; - static char numstr[MAXSTR]; - long atol(); - - p = numstr; - expsign = 0; - if (c == '+' || c == '-') { - if (c == '-') - *p++ = c; - c = nextchar(); - } - if (isdigit(c) == 0) - syntax("digit expected"); - n = sp_cst4; - for (;;) { - if (p >= &numstr[MAXSTR-1]) - fatal("number too long"); - *p++ = c; - c = nextchar(); - if (c == '.' || c == 'e' || c == 'E') { - expsign = c != '.'; - n = sp_fcon; - continue; - } - if (expsign) { - expsign = 0; - if (c == '+' || c == '-') - continue; - } - if (isdigit(c) == 0) - break; - } - peekc = c; - *p = '\0'; - c = nospace(); - if (n == sp_fcon && c != 'F') - syntax("'F' expected"); - if (c == 'I' || c == 'U' || c == 'F') - return(incon(numstr,c)); - peekc = c; - argval = atol(numstr); - return(sp_cst4); -} - -in15u() { - - if (innumber(nextchar()) != sp_cst4) - syntax("integer expected"); - check((argval & ~077777) == 0); -} - -int incon(p,c) register char *p; { - register char *q; - - q = string; - while (*q++ = *p++) - ; - strsiz = q - string - 1; - gettyp(cst_ptyp); - return(c == 'I' ? sp_icon : (c == 'U' ? sp_ucon : sp_fcon)); -} - -int instring(termc) { - register char *p; - register c; - - p = string; - for (;;) { - c = nextchar(); - if (c == '\n' || c == EOF) { - peekc = c; - syntax("non-terminated string"); - } - if (c == termc) { - if (termc == '"') - *p++ = '\0'; - break; - } - if (c == '\\') - c = inescape(); - if (p >= &string[MAXSTR-1]) - fatal("string too long"); - *p++ = c; - } - strsiz = p - string; - return(sp_scon); -} - -int inescape() { - register c,j,r; - - c = nextchar(); - if (c >= '0' && c <= '7') { - r = c - '0'; - for (j = 0; j < 2; j++) { - c = nextchar(); - if (c < '0' || c > '7') { - peekc = c; - return(r); - } - r <<= 3; - r += (c - '0'); - } - return(r); - } - switch (c) { - case 'b': return('\b'); - case 'f': return('\f'); - case 'n': return('\n'); - case 'r': return('\r'); - case 't': return('\t'); - } - return(c); -} - -int nospace() { - register c; - - do - c = nextchar(); - while (isspace(c) && c != '\n'); - if (c == ';') - do - c = nextchar(); - while (c != '\n' && c != EOF); - return(c); -} - -int nextchar() { - register c; - - if (peekc != EMPTY) { - c = peekc; - peekc = EMPTY; - return(c); - } - c = getchar(); - if (isascii(c) == 0 && c != EOF) - fatal("non-ascii char"); - return(c); -} - -line_line() { - register char *p,*q; - static char filebuff[MAXSTR+1]; - - gettyp(ptyp(sp_cst2)); - lineno = (int) (argval-1); - gettyp(ptyp(sp_scon)); - p = string; - q = filebuff; - while (--strsiz >= 0) - *q++ = *p++; - *q = '\0'; - filename = filebuff; -} - -init() { - register i; - - for (i = sp_fmnem; i <= sp_lmnem; i++) - pre_hash(i,em_mnem[i - sp_fmnem]); - for (i = sp_fpseu; i <= sp_lpseu; i++) - pre_hash(i,em_pseu[i - sp_fpseu]); - /* treat '_' as letter */ - /* In System III the array is called _ctype[] without the trailing '_' */ - (_ctype_+1)['_'] = (_ctype_+1)['a']; -} - -pre_hash(i,s) char *s; { - register unsigned h; - - assert(i != 0); - h = hash(s); - for (;;) { - h++; - h %= HSIZE; - if (hashtab[h] == 0) { - hashtab[h] = i; - return; - } - } -} - -int hash(s) register char *s; { - register h; - - h = 0; - while (*s) { - h <<= 1; - h += *s++; - } - return(h); -} - -/* ----- output ----- */ - -putarg(sp) register sp; { - register i; - - switch (sp) { - case sp_ilb2: - i = (int) argval; - if (fit8u(i)) { - put8(sp_ilb1); - put8(i); - break; - } - put8(sp); - put16(i); - break; - case sp_dlb2: - i = dlbval; - if (fit8u(i)) { - put8(sp_dlb1); - put8(i); - break; - } - put8(sp); - put16(i); - break; - case sp_cst2: - case sp_cst4: - if (fit16i(argval) == 0) { - put8(sp_cst4); - put32(argval); - break; - } - i = (int) argval; - if (i >= -sp_zcst0 && i < sp_ncst0 - sp_zcst0) { - put8(i + sp_zcst0 + sp_fcst0); - break; - } - put8(sp_cst2); - put16(i); - break; - case sp_doff: - put8(sp); - putarg(offtyp); - putarg(sp_cst4); - break; - case sp_dnam: - case sp_pnam: - case sp_scon: - put8(sp); - putstr(); - break; - case sp_icon: - case sp_ucon: - case sp_fcon: - put8(sp); - putarg(sp_cst4); - putstr(); - break; - case sp_cend: - put8(sp); - break; - } -} - -putstr() { - register char *p; - long consiz; - - consiz = argval; - argval = strsiz; - putarg(sp_cst4); - argval = consiz; - p = string; - while (--strsiz >= 0) - put8(*p++); -} - -put16(w) int w; { - - put8(w); - put8(w >> 8); -} - -put32(f) long f; { - - put16((int) f); - put16((int)(f >> 16)); -} - -/* ----- error handling ----- */ - -fail_check() { - error("argument range error"); -} - -/* VARARGS */ -error(s,a1,a2,a3,a4) char *s; { - fprintf(stderr,"%s: line %d: ", filename, lineno); - fprintf(stderr,s,a1,a2,a3,a4); - fprintf(stderr,"\n"); - errors++; -} - -/* VARARGS */ -fatal(s,a1,a2,a3,a4) char *s; { - error(s,a1,a2,a3,a4); - exit(-1); -} - -/* VARARGS */ -syntax(s,a1,a2,a3,a4) char *s; { - register c; - - error(s,a1,a2,a3,a4); - do - c = nextchar(); - while (c != '\n' && c != EOF); - longjmp(recover); -} diff --git a/util/ncgg/Makefile b/util/ncgg/Makefile deleted file mode 100644 index 1db16facf..000000000 --- a/util/ncgg/Makefile +++ /dev/null @@ -1,181 +0,0 @@ -# $Header$ - -CFILES=cgg.c subr.c main.c coerc.c enterkeyw.c error.c emlookup.c expr.c instruct.c iocc.c lookup.c output.c set.c strlookup.c var.c hall.c -OFILES=cgg.o subr.o main.o coerc.o enterkeyw.o error.o emlookup.o expr.o instruct.o iocc.o lookup.o set.o strlookup.o var.o hall.o -SOURCES=*.h cgg.y scan.l cvtkeywords keywords coerc.c emlookup.c error.c expr.c hall.c instruct.c iocc.c lookup.c main.c output.c set.c strlookup.c subr.c var.c -EMHOME=../.. -EMH=$(EMHOME)/h -MANDIR=$(EMHOME)/man -INCLUDES=-I$(EMH) -CFLAGS=-O $(INCLUDES) -YFLAGS=-v -d -LDFLAGS= -LEXLIB=-ll - - -cgg: cgg.o $(OFILES) output.o - $(CC) $(LDFLAGS) $(OFILES) output.o $(EMHOME)/lib/em_data.a $(LEXLIB) -o cgg - -install: cgg - rm -f $(EMHOME)/lib/ncgg - cp cgg $(EMHOME)/lib/ncgg - rm -f $(MANDIR)/ncgg.6 - cp ncgg.6 $(MANDIR)/ncgg.6 - -cmp: cgg - -cmp cgg $(EMHOME)/lib/ncgg - -cmp ncgg.6 $(MANDIR)/ncgg.6 - -debugcgg: cgg.o $(OFILES) debugoutput.o - $(CC) $(LDFLAGS) $(OFILES) debugoutput.o $(EMHOME)/lib/em_data.a -ll -o cgg - -cgg.o: scan.c - -enterkeyw.c: cvtkeywords keywords y.tab.h - cvtkeywords keywords - -debugoutput.o: debugoutput.c - $(CC) $(CFLAGS) -DCODEDEBUG -c debugoutput.c - -debugoutput.c: output.c - cp output.c debugoutput.c - -lint: $(CFILES) - lint $(INCLUDES) $(CFILES) - touch lint - -clean: - rm -f cgg.c scan.c y.output y.tab.h enterkeyw.c - rm -f $(OFILES) output.o debugoutput.o cgg lint - -pr: - pr $(SOURCES) - -opr: - -make pr|opr - -depend: - makedepend - -cgg.o: $(EMH)/cgg_cg.h -coerc.o: $(EMH)/cgg_cg.h -debugoutput.o: $(EMH)/cgg_cg.h -expr.o: $(EMH)/cgg_cg.h -instruct.o: $(EMH)/cgg_cg.h -iocc.o: $(EMH)/cgg_cg.h -output.o: $(EMH)/cgg_cg.h -set.o: $(EMH)/cgg_cg.h -subr.o: $(EMH)/cgg_cg.h -var.o: $(EMH)/cgg_cg.h -# AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO -cgg.o: expr.h -cgg.o: extern.h -cgg.o: instruct.h -cgg.o: iocc.h -cgg.o: lookup.h -cgg.o: param.h -cgg.o: scan.c -cgg.o: set.h -cgg.o: varinfo.h -coerc.o: assert.h -coerc.o: extern.h -coerc.o: iocc.h -coerc.o: param.h -coerc.o: property.h -coerc.o: pseudo.h -coerc.o: reg.h -coerc.o: set.h -coerc.o: token.h -coerc.o: varinfo.h -debugoutput.o: assert.h -debugoutput.o: extern.h -debugoutput.o: instruct.h -debugoutput.o: lookup.h -debugoutput.o: param.h -debugoutput.o: property.h -debugoutput.o: pseudo.h -debugoutput.o: reg.h -debugoutput.o: regvar.h -debugoutput.o: set.h -debugoutput.o: token.h -debugoutput.o: varinfo.h -emlookup.o: expr.h -emlookup.o: param.h -enterkeyw.o: lookup.h -expr.o: assert.h -expr.o: expr.h -expr.o: extern.h -expr.o: lookup.h -expr.o: param.h -expr.o: property.h -expr.o: reg.h -expr.o: regvar.h -expr.o: set.h -expr.o: token.h -hall.o: assert.h -hall.o: param.h -hall.o: set.h -instruct.o: expr.h -instruct.o: extern.h -instruct.o: instruct.h -instruct.o: iocc.h -instruct.o: param.h -instruct.o: pseudo.h -instruct.o: set.h -instruct.o: varinfo.h -iocc.o: assert.h -iocc.o: expr.h -iocc.o: extern.h -iocc.o: iocc.h -iocc.o: lookup.h -iocc.o: param.h -iocc.o: property.h -iocc.o: regvar.h -iocc.o: set.h -iocc.o: token.h -lookup.o: assert.h -lookup.o: lookup.h -lookup.o: param.h -output.o: assert.h -output.o: extern.h -output.o: instruct.h -output.o: lookup.h -output.o: param.h -output.o: property.h -output.o: pseudo.h -output.o: reg.h -output.o: regvar.h -output.o: set.h -output.o: token.h -output.o: varinfo.h -scan.o: stdio.h -set.o: extern.h -set.o: lookup.h -set.o: param.h -set.o: property.h -set.o: reg.h -set.o: set.h -set.o: token.h -strlookup.o: param.h -subr.o: expr.h -subr.o: extern.h -subr.o: instruct.h -subr.o: lookup.h -subr.o: param.h -subr.o: property.h -subr.o: reg.h -subr.o: regvar.h -subr.o: set.h -subr.o: token.h -subr.o: varinfo.h -tables.o: data.h -tables.o: param.h -tables.o: tables.h -tables.o: types.h -var.o: instruct.h -var.o: lookup.h -var.o: param.h -var.o: property.h -var.o: reg.h -var.o: set.h -var.o: token.h diff --git a/util/ncgg/makedepend b/util/ncgg/makedepend deleted file mode 100755 index 31e2e20da..000000000 --- a/util/ncgg/makedepend +++ /dev/null @@ -1,15 +0,0 @@ -: '$Header$' -for extension in c y -do - for file in *.$extension - do ofile=`basename $file .$extension`.o - grep '^# *include.*"' $file|sed "s/.*\"\(.*\)\".*/$ofile: \1/" - done -done | sort -u >depend -ed - Makefile <<'!' -/AUTOAUTOAUTO/+,$d -$r depend -w -q -! -rm -f depend diff --git a/util/opt/Makefile b/util/opt/Makefile deleted file mode 100644 index c2c142f81..000000000 --- a/util/opt/Makefile +++ /dev/null @@ -1,228 +0,0 @@ -# $Header$ - -EMHOME=../.. -CFILES=main.c getline.c lookup.c var.c process.c backward.c util.c \ - alloc.c putline.c cleanup.c peephole.c flow.c reg.c tes.c \ - pop_push.c - -OFILES=main.o getline.o lookup.o var.o process.o backward.o util.o\ - alloc.o putline.o cleanup.o peephole.o flow.o tes.o pop_push.o -ONOGLOB=regnoglob.o -OGLOB=regglob.o -LIBS=$(EMHOME)/lib/em_data.a -CFLAGS=-O -DNDEBUG -I$(EMHOME)/h -LDFLAGS= -LINT=lint -OPR=opr -PROPTS= -CPP=$(EMHOME)/lib/cpp -# LEXLIB is implementation dependent, try -ll or -lln first -LEXLIB=-ll - -all: opt opt2 - -opt: $(OFILES) $(ONOGLOB) pattern.o $(LIBS) - $(CC) $(LDFLAGS) $(CFLAGS) $(OFILES) $(ONOGLOB) pattern.o $(LIBS) -o opt - -opt2: $(OFILES) $(OGLOB) pattern.o $(LIBS) - $(CC) $(LDFLAGS) $(CFLAGS) $(OFILES) $(OGLOB) pattern.o $(LIBS) -o opt2 - -test: opt testopt - testopt - -cmp: all - -cmp opt $(EMHOME)/lib/em_opt - -cmp opt2 $(EMHOME)/lib/em_opt2 - -cmp em_opt.6 $(EMHOME)/man/em_opt.6 - -install:all - -size opt $(EMHOME)/lib/em_opt - rm -f $(EMHOME)/lib/em_opt - cp opt $(EMHOME)/lib/em_opt - -size opt2 $(EMHOME)/lib/em_opt2 - rm -f $(EMHOME)/lib/em_opt2 - cp opt2 $(EMHOME)/lib/em_opt2 - rm -f $(EMHOME)/man/em_opt.6 - cp em_opt.6 $(EMHOME)/man/em_opt.6 - -pattern.c: patterns mktab - $(CPP) patterns | mktab > pattern.c - -mktab: mktab.o $(LIBS) - $(CC) $(CFLAGS) mktab.o $(LIBS) $(LEXLIB) -o mktab - -mktab.o: scan.c optim.h param.h pattern.h types.h - -pop_push.c pop_push.h: $(EMHOME)/etc/em_table pop_push.awk - awk -f pop_push.awk < $(EMHOME)/etc/em_table > pop_push.c - -depend: pattern.c - sed '/^#AUTOAUTO/,$$d' Makefile >Makefile.new - echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >> Makefile.new - cp reg.c regglob.c - cp reg.c regnoglob.c - mkdep $(CFILES) pattern.c regglob.c regnoglob.c | sed 's/\.c:/.o:/' >> Makefile.new - rm -f regglob.c regnoglob.c - mv Makefile Makefile.old - mv Makefile.new Makefile - -lint: $(CFILES) pattern.c - $(LINT) $(CFLAGS) $(CFILES) pattern.c>lint 2>&1 - -printall: - -pr $(PROPTS) Makefile -n *.h `ls $(CFILES)` mktab.y scan.l patterns|$(OPR) - touch print - -print: Makefile *.h $(CFILES) mktab.y scan.l patterns - -pr $(PROPTS) -n $? | $(OPR) - touch print - -opr: - make pr | $(OPR) - -pr: - @pr $(PROPTS) -n Makefile *.h $(CFILES) mktab.y scan.l patterns - -clean: - rm -f *.o opt mktab mktab.c scan.c pattern.c opt2 Out \ - pop_push.c pop_push.h - -regnoglob.o: reg.c - $(CC) $(CFLAGS) -c reg.c - mv reg.o regnoglob.o - -regglob.o: reg.c - $(CC) $(CFLAGS) -c -DGLOBAL_OPT reg.c - mv reg.o regglob.o - -# the next lines are generated automatically -#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO -main.o: alloc.h -main.o: ext.h -main.o: param.h -main.o: tes.h -main.o: types.h -getline.o: alloc.h -getline.o: ext.h -getline.o: line.h -getline.o: lookup.h -getline.o: param.h -getline.o: proinf.h -getline.o: tes.h -getline.o: types.h -lookup.o: alloc.h -lookup.o: lookup.h -lookup.o: param.h -lookup.o: proinf.h -lookup.o: tes.h -lookup.o: types.h -var.o: lookup.h -var.o: param.h -var.o: proinf.h -var.o: tes.h -var.o: types.h -process.o: alloc.h -process.o: assert.h -process.o: ext.h -process.o: line.h -process.o: lookup.h -process.o: param.h -process.o: proinf.h -process.o: tes.h -process.o: types.h -backward.o: alloc.h -backward.o: assert.h -backward.o: ext.h -backward.o: line.h -backward.o: lookup.h -backward.o: param.h -backward.o: proinf.h -backward.o: tes.h -backward.o: types.h -util.o: assert.h -util.o: ext.h -util.o: lookup.h -util.o: optim.h -util.o: param.h -util.o: proinf.h -util.o: tes.h -util.o: types.h -alloc.o: alloc.h -alloc.o: assert.h -alloc.o: line.h -alloc.o: lookup.h -alloc.o: param.h -alloc.o: proinf.h -alloc.o: tes.h -alloc.o: types.h -putline.o: alloc.h -putline.o: assert.h -putline.o: ext.h -putline.o: line.h -putline.o: lookup.h -putline.o: optim.h -putline.o: param.h -putline.o: proinf.h -putline.o: tes.h -putline.o: types.h -cleanup.o: assert.h -cleanup.o: ext.h -cleanup.o: lookup.h -cleanup.o: param.h -cleanup.o: types.h -peephole.o: alloc.h -peephole.o: assert.h -peephole.o: ext.h -peephole.o: line.h -peephole.o: lookup.h -peephole.o: optim.h -peephole.o: param.h -peephole.o: pattern.h -peephole.o: proinf.h -peephole.o: tes.h -peephole.o: types.h -flow.o: alloc.h -flow.o: ext.h -flow.o: line.h -flow.o: optim.h -flow.o: param.h -flow.o: proinf.h -flow.o: tes.h -flow.o: types.h -reg.o: alloc.h -reg.o: assert.h -reg.o: ext.h -reg.o: line.h -reg.o: param.h -reg.o: proinf.h -reg.o: tes.h -reg.o: types.h -tes.o: alloc.h -tes.o: assert.h -tes.o: ext.h -tes.o: line.h -tes.o: param.h -tes.o: pop_push.h -tes.o: proinf.h -tes.o: tes.h -tes.o: types.h -pop_push.o: pop_push.h -pattern.o: param.h -pattern.o: pattern.h -pattern.o: types.h -regglob.o: alloc.h -regglob.o: assert.h -regglob.o: ext.h -regglob.o: line.h -regglob.o: param.h -regglob.o: proinf.h -regglob.o: tes.h -regglob.o: types.h -regnoglob.o: alloc.h -regnoglob.o: assert.h -regnoglob.o: ext.h -regnoglob.o: line.h -regnoglob.o: param.h -regnoglob.o: proinf.h -regnoglob.o: tes.h -regnoglob.o: types.h diff --git a/util/opt/makedepend b/util/opt/makedepend deleted file mode 100755 index 31e2e20da..000000000 --- a/util/opt/makedepend +++ /dev/null @@ -1,15 +0,0 @@ -: '$Header$' -for extension in c y -do - for file in *.$extension - do ofile=`basename $file .$extension`.o - grep '^# *include.*"' $file|sed "s/.*\"\(.*\)\".*/$ofile: \1/" - done -done | sort -u >depend -ed - Makefile <<'!' -/AUTOAUTOAUTO/+,$d -$r depend -w -q -! -rm -f depend diff --git a/util/opt/shc.c b/util/opt/shc.c deleted file mode 100644 index eabf04af9..000000000 --- a/util/opt/shc.c +++ /dev/null @@ -1,226 +0,0 @@ -/* - * This file contains the main part of the stackheight computation phase. - * - * Author: Hans van Eck. - */ - -#include -#include -#include -#include -#include "param.h" -#include "assert.h" -#include "types.h" -#include "shc.h" -#include "alloc.h" -#include "proinf.h" -#include "line.h" -#include "ext.h" -#include "pop_push.h" - -extern char *pop_push[]; -extern char flow_tab[]; - -#define NON_CONTINUABLE(i) (flow_tab[i]&JUMP) -#define ISABRANCH(i) (flow_tab[i]&HASLABEL) -#define ISCONDBRANCH(i) (flow_tab[i]&CONDBRA) - -lblst_p est_list = NULL; - -#define INSTR(lnp) (lnp->l_instr & BMASK) -#define TYPE(lnp) lnp->l_optyp -#define PREV(lnp) lnp->l_prev -#define SHORT(lnp) lnp->l_a.la_short -#define MINI(lnp) ((lnp->l_optyp & BMASK) - Z_OPMINI) - -#define IS_MINI(lnp) (lnp->l_optyp >= OPMINI) -#define IS_LOC(l) (l!=(line_p) 0 && INSTR(l)==op_loc && IS_MINI(l)) - -int state; -static int stack_height = 0; - -init_state() -{ - stack_height = 0; - change_state(KNOWN); - est_list = NULL; -} - -shc_pseudos() -{ - register line_p lp; - - for (lp = pseudos; lp != (line_p)0; lp = lp->l_next) { - switch(INSTR(lp)) { - case ps_con: - case ps_rom: - if (lp->l_optyp == OPLIST) { - register arg_p ap = lp->l_a.la_arg; - - while (ap != (arg_p) 0) { - if (ap->a_typ == ARGNUM) { - assign_label(ap->a_a.a_np->n_repl); - } - ap = ap->a_next; - } - } else if (lp->l_optyp == OPNUMLAB) - assign_label(lp->l_a.la_np->n_repl); - } - } -} - -shc_instr(lnp) -line_p lnp; -{ - char *s; - register instr = INSTR(lnp); - register int mult, arg, argdef; - line_p x = PREV(lnp); - line_p y = (x == (line_p) 0 ? (line_p) 0 : PREV(x)); - - if (state == NO_STACK_MES) return; - - if ( instr == op_lab) { - do_inst_label(lnp); - return; - } - if (instr < sp_fmnem || instr > sp_lmnem) { - return; - } - - if(state == NOTREACHED) return; /* What else ? */ - s = pop_push[instr]; - - if (*s != '0') - while (*s != '\0') { - if (*s++ == '-') mult = -1; - else mult = 1; - if (TYPE(lnp) == OPSHORT) { - arg = SHORT(lnp); - if (arg < wordsize) arg = wordsize; - argdef = TRUE; - } else if (IS_MINI(lnp)) { - arg = MINI(lnp); - if (arg > 0 && arg < wordsize) arg = wordsize; - if (arg < 0 && -arg < wordsize) arg = -wordsize; - argdef = TRUE; - } else argdef = FALSE; - switch (*s++) { - case 'w': stack_height += mult * wordsize; break; - case 'd': stack_height += mult * wordsize * 2; break; - case 'p': stack_height += mult * pointersize; break; - case 'a': - if (argdef == FALSE || instr == op_ass) { - change_state(NO_STACK_MES); - return; - } - stack_height += mult * arg; - break; - case 'x': - if (IS_LOC(x)) { - arg = MINI(x); - if (arg < wordsize) arg = wordsize; - stack_height += mult * arg; - break; - } - change_state(NO_STACK_MES); - return; - case 'y': - if (IS_LOC(y)) { - arg = MINI(y); - if (arg < wordsize) arg = wordsize; - stack_height += mult * arg; - break; - } - change_state(NO_STACK_MES); - return; - case '?': - /* Actually, the effect of a ret on the stack is - * known, but it has a '?' anyway. I think this - * should be changed in ~etc/em_table - */ - if (instr == op_ret) - break; - change_state(NO_STACK_MES); - return; - default: - assert(FALSE); - } - } - - if (ISABRANCH(instr)) do_inst_label(lnp); - if (NON_CONTINUABLE(instr)) change_state(NOTREACHED); -} - -change_state(mode) -int mode; -{ - state = mode; - if (mode != KNOWN) stack_height = 0; -} - -delete_labels() -{ - register lblst_p tmp; - - while ((tmp = est_list) != NULL) { - est_list = est_list->ll_next; - oldlblst(tmp); - } -} - -inst_old_label(lst_elt) -register lblst_p lst_elt; -{ - if (state != NOTREACHED) { - if (stack_height < 0 || lst_elt->ll_height != stack_height) { - change_state(NO_STACK_MES); - } - } else { /* after a label */ - stack_height = lst_elt->ll_height; - } -} - -inst_new_label(label) -register num_p label; -{ - register lblst_p lst_elt; - - lst_elt = newlblst(); - lst_elt->ll_next = est_list; - lst_elt->ll_num = label; - lst_elt->ll_height = stack_height; - - est_list = lst_elt; - - label->n_lst_elt = lst_elt; - label->n_flags |= NUMSET; -} - -assign_label(label) -num_p label; -{ - if (label->n_flags & NUMSET) - inst_old_label(label->n_lst_elt); - else inst_new_label(label); -} - -do_inst_label(lnp) /* (re-)install a label */ -line_p lnp; -{ - num_p label = lnp->l_a.la_np->n_repl; - int instr = INSTR(lnp); - - assign_label(label); - - if (instr == op_lab) { - if (state == NOTREACHED) { - label->n_lst_elt->ll_fallthrough = FALSE; - } else { - label->n_lst_elt->ll_fallthrough = TRUE; - } - } else if (ISCONDBRANCH(instr)) { /* conditional branch */ - label->n_flags |= NUMCOND; - } - if (state != NO_STACK_MES) change_state(KNOWN); -} diff --git a/util/opt/shc.h b/util/opt/shc.h deleted file mode 100644 index 5f76e65a8..000000000 --- a/util/opt/shc.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Author: Hans van Eck. - */ - -typedef struct label_list *lblst_p; - -struct label_list { - lblst_p ll_next; /* pointer to next label in the list */ - num_p ll_num; /* pointer to label definition */ - short ll_height; /* the height of the stack at this label */ - char ll_fallthrough; /* is the label reached by fallthrough ? */ -}; - -typedef struct label_list lblst_t; - -extern lblst_p est_list; -extern int state; -#define KNOWN 1 -#define NOTREACHED 2 -#define NO_STACK_MES 3 diff --git a/util/shf/Makefile b/util/shf/Makefile deleted file mode 100644 index 813a5effb..000000000 --- a/util/shf/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# $Header$ - -install: - -rm -f ../../bin/march - cp march.sh ../../bin/march - -clean: - @echo always clean - -cmp: - cmp march.sh ../../bin/march - -opr: - make pr|opr - -pr: - pr march.sh diff --git a/util/topgen/Makefile b/util/topgen/Makefile deleted file mode 100644 index 40687ea18..000000000 --- a/util/topgen/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -EM = ../.. -CFLAGS = -O -SOURCE = token.h symtab.h misc.h tunable.h main.c topgen.g LLlex.c symtab.c pattern.c hash.c -CFILES = main.c topgen.c Lpars.c LLlex.c symtab.c pattern.c hash.c -OFILES = main.o topgen.o Lpars.o LLlex.o symtab.o pattern.o hash.o - -all: parser - @make topgen - -cmp: all - cmp topgen $(EM)/lib/topgen - -install: all - cp topgen $(EM)/lib/topgen - -clean: - rm -f topgen *.o Lpars.c Lpars.h topgen.c parser - -parser: topgen.g - $(EM)/bin/LLgen topgen.g - touch parser - -topgen.o: token.h Lpars.h symtab.h misc.h -Lpars.o: Lpars.h -LLlex.o: token.h Lpars.h tunable.h -symtab.o: symtab.h -hash.o: misc.h -pattern.o: misc.h symtab.h - -topgen: $(OFILES) - $(CC) $(OFILES) -o topgen - -lint: parser - lint $(CFILES) - -pr: - @pr $(SOURCE) Makefile - -opr: - make pr ^ opr