         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.globl	main
		main:
		.LFB185:
		.LVL0:
				pushq	%r15
				pushq	%r14
				pushq	%r13
				pushq	%r12
				pushq	%rbx
				subq	$5648, %rsp
				movq	%fs:40, %rax
				movq	%rax, 5640(%rsp)
				xorl	%eax, %eax
    2
				call	_imp_initialise@PLT
		.LVL1:
		.LBB171:
    3 !
    4 ! Precedence of operators
    5 !
    6 ! Highest: 1. \ (complement, unary not)
    7 !          2. \, \\, <<, >>
    8 !          3. *, /, //, &
    9 ! Lowest:  4. +, - (unary and binary), !, !!
   10 !
   11 ! In general, sub-expressions with operators of equal precedence are evaluated from left to right.
   12 !
   13 ! The one exception to the left-hand precedence rule is that consecutive
   14 ! exponentiations are evaluated from right to left; thus A**B**C is
   15 ! evaluated as A**(B**C), not as (A**B)**C.  (Imp80 documentation)
   16
   17 ! Arithmetic operators:
   18
   19 ! |...| modulus              also: !...!  (deprecated some time ago)
   20
   21 ! !  inclusive or
   22 ! !! exclusive or
   23 ! &  and
   24
   25 ! \  real exponentiation     also:  ^  (Imp77)  or  **    (ERCC compilers)
   26 ! \\ integer exponentiation  also:  ^^ (Imp77)  or  ****
   27
   28 ! *  multiply
   29 ! /  real division
   30 ! // integer division
   31
   32 ! << left shift
   33 ! >> right shift
   34
   35 ! +  plus
   36 ! -  minus
   37
   38 ! +  unary +
   39 ! -  unary -
   40 ! \  unary not               also ~ (can be *displayed* as: ¬ (&not;))
   41
   42 ! .  string concatenation
   43
   44 ! Comparison operators:
   45 ! =  eq
   46 ! #  not equals              also \= and <> (Imp80 documentation)
   47 ! == address equals
   48 ! ## address not equals      also \==
   49 ! -> string resolution       (a difficult to classify hybrid of a comparison and an assignment operator)
   50 ! <= less than or equals
   51 ! <  less than
   52 ! >= greater than or equals
   53 ! >
   54
   55 ! Assignment operators:
   56 ! =  assignment
   57 ! == pointer assignment
   58 ! <- jam transfer
   59 ! -> string resolution
   60
   61 ! Data structure operators:
   62 ! _  record field
   63 ! () array indexing
   64 ! [] pointer increment       (a Hamish extension in 68000 Imp only)
   65
   66 ! Other:
   67 ! @  may be considered an operator in %real literals, usually handled by a BIP.
   68
   69
   70   %const %integer a = 19, b = 17, c = 5, d = 3
   71   %integer x = a * b // c * d
   72   print string("Imp77 precedence and associativity test."); newlines(2)
				movabsq	$8246126339240783177, %rax
				movabsq	$7305804402280194917, %rdx
				movq	%rax, 5377(%rsp)
				movq	%rdx, 5385(%rsp)
				movabsq	$8319099728435241248, %rax
				movabsq	$7599377369805710191, %rdx
				movq	%rax, 5393(%rsp)
				movq	%rdx, 5401(%rsp)
				movabsq	$3347427302620297588, %rax
				movl	$0, %edx
				movq	%rax, 5409(%rsp)
				movq	%rdx, 5417(%rsp)
				movl	$0, %ebx
				movb	$0, 5425(%rsp)
				movw	$0, 5426(%rsp)
				movl	$0, 5428(%rsp)
				leaq	5432(%rsp), %rdi
				movl	$25, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$40, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, (%rsp)
				movq	%rdx, 8(%rsp)
		.LVL2:
				movb	$40, (%rsp)
		.LBE171:
		.LBB172:
		.LBB173:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				call	_imp_printstring@PLT
		.LVL3:
		.LBE173:
		.LBE172:
		.LBB174:
		.LBB175:
				addq	$256, %rsp
				movl	$2, %edi
				call	_imp_newlines@PLT
		.LVL4:
		.LDL1:
		.LDL2:
		.LBE175:
		.LBE174:
		.LBB176:
   73   %if x = 21 %start
   74     print string("In a * b // c * d, '*' has higher priority than '/'."); newline
   75     print string("A second test with '/' will be needed to determine associativity:"); newline
   76     x = a // c // d
   77     %if x = 1 %start
   78       print string("a // c // d is right associative, i.e. a // (b // c)"); newline
   79     %else %if x = 19
   80       print string("a // c // d is left associative, i.e. (a // b) // c"); newline
   81     %else
   82       print string("a // c // d is something weird!  I give up."); newline
   83     %finish
   84   %else %if x = 19
   85     print string("a * b // c * d is right associative and with equal precedence, i.e. a * (b // (c * d))"); newline
   86     newline
   87     print string("This grammar would support the above:"); newline
   88     newline
   89     print string("P<expr> = <term> <op-term-list> ;"); newline
   90     print string("P<op-term-list> = <op-term> <op-term-list> | ;"); newline
   91     print string("P<op-term> = <op> <term> ;"); newline
   92   %else %if x = 192
   93     print string("a * b // c * d is left associative and with equal precedence, i.e. ((a * b) // c) * d"); newline
				movabsq	$3399971849506529377, %rax
				movabsq	$7575164662545670944, %rdx
				movq	%rax, 5377(%rsp)
				movq	%rdx, 5385(%rsp)
				movabsq	$6998721804070822003, %rax
				movabsq	$7598805576548578163, %rdx
				movq	%rax, 5393(%rsp)
				movq	%rdx, 5401(%rsp)
				movabsq	$8583971315006858614, %rax
				movabsq	$7022643873103508585, %rdx
				movq	%rax, 5409(%rsp)
				movq	%rdx, 5417(%rsp)
				movabsq	$7234297663803367532, %rax
				movabsq	$3344239573350968933, %rdx
				movq	%rax, 5425(%rsp)
				movq	%rdx, 5433(%rsp)
				movabsq	$3035532973947498085, %rax
				movabsq	$7142760888459158048, %rdx
				movq	%rax, 5441(%rsp)
				movq	%rdx, 5449(%rsp)
				movabsq	$430036361257, %rax
				movl	$0, %edx
				movq	%rax, 5457(%rsp)
				movq	%rdx, 5465(%rsp)
				movb	$0, 5473(%rsp)
				movw	$0, 5474(%rsp)
				movl	$0, 5476(%rsp)
				leaq	5480(%rsp), %rdi
				movl	$19, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$85, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, 256(%rsp)
				movq	%rdx, 264(%rsp)
		.LVL5:
				movb	$85, 256(%rsp)
		.LBE176:
		.LBB177:
		.LBB178:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				call	_imp_printstring@PLT
		.LVL6:
		.LBE178:
		.LBE177:
		.LBB179:
		.LBB180:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL7:
		.LBE180:
		.LBE179:
		.LBB181:
		.LBB182:
				call	_imp_newline@PLT
		.LVL8:
		.LBE182:
		.LBE181:
		.LBB183:
   94     newline
   95     print string("This grammar would support the above:"); newline
				movabsq	$7021788158096926804, %r14
				movabsq	$8462113206094097773, %r15
				movq	%r14, 5377(%rsp)
				movq	%r15, 5385(%rsp)
				movabsq	$8030041785346581612, %r12
				movabsq	$6998705320233038962, %r13
				movq	%r12, 5393(%rsp)
				movq	%r13, 5401(%rsp)
				movabsq	$250810363746, %rax
				movl	$0, %edx
				movq	%rax, 5409(%rsp)
				movq	%rdx, 5417(%rsp)
				movb	$0, 5425(%rsp)
				movw	$0, 5426(%rsp)
				movl	$0, 5428(%rsp)
				leaq	5432(%rsp), %rdi
				movl	$25, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$37, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, 512(%rsp)
				movq	%rdx, 520(%rsp)
		.LVL9:
				movb	$37, 512(%rsp)
		.LBE183:
		.LBB184:
		.LBB185:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				call	_imp_printstring@PLT
		.LVL10:
		.LBE185:
		.LBE184:
		.LBB186:
		.LBB187:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL11:
		.LBE187:
		.LBE186:
		.LBB188:
		.LBB189:
				call	_imp_newline@PLT
		.LVL12:
		.LBE189:
		.LBE188:
		.LBB190:
   96     newline
   97     print string("P<expr> = <term-op-list> <term> ;"); newline
				movabsq	$2323420285151558736, %rsi
				movabsq	$3273398284235579453, %rdi
				movq	%rsi, 5377(%rsp)
				movq	%rdi, 5385(%rsp)
				movabsq	$4500348824273645679, %rdx
				movabsq	$2323414795865570336, %rcx
				movq	%rdx, 5393(%rsp)
				movq	%rcx, 5401(%rsp)
				movq	$59, 5409(%rsp)
				movq	$0, 5417(%rsp)
				movb	$0, 5425(%rsp)
				movw	$0, 5426(%rsp)
				movl	$0, 5428(%rsp)
				leaq	5432(%rsp), %rdi
				movl	$25, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$33, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, 768(%rsp)
				movq	%rdx, 776(%rsp)
		.LVL13:
				movb	$33, 768(%rsp)
		.LBE190:
		.LBB191:
		.LBB192:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				call	_imp_printstring@PLT
		.LVL14:
		.LBE192:
		.LBE191:
		.LBB193:
		.LBB194:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL15:
		.LBE194:
		.LBE193:
		.LBB195:
   98     print string("P<term-op-list> = <term-op> <term-op-list> | ;"); newline
				movabsq	$8011179650257796176, %rdx
				movabsq	$2323422496808512880, %rcx
				movq	%rdx, 5377(%rsp)
				movq	%rcx, 5385(%rsp)
				movabsq	$3273398284235579453, %rdx
				movabsq	$8243122494559383663, %rcx
				movq	%rdx, 5393(%rsp)
				movq	%rcx, 5401(%rsp)
				movabsq	$8316297129331993965, %rdx
				movabsq	$65010707480180, %rcx
				movq	%rdx, 5409(%rsp)
				movq	%rcx, 5417(%rsp)
				movb	$0, 5425(%rsp)
				movw	$0, 5426(%rsp)
				movl	$0, 5428(%rsp)
				leaq	5432(%rsp), %rdi
				movl	$25, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$46, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, 1024(%rsp)
				movq	%rdx, 1032(%rsp)
		.LVL16:
				movb	$46, 1024(%rsp)
		.LBE195:
		.LBB196:
		.LBB197:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	1272(%rsp)
				pushq	1272(%rsp)
				call	_imp_printstring@PLT
		.LVL17:
		.LBE197:
		.LBE196:
		.LBB198:
		.LBB199:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL18:
		.LBE199:
		.LBE198:
		.LBB200:
   99     print string("P<term-op> = <term> <op> ;"); newline
				movabsq	$8011179650257796176, %rdx
				movabsq	$7310534204291300976, %rcx
				movq	%rdx, 5377(%rsp)
				movq	%rcx, 5385(%rsp)
				movabsq	$4499218331772808562, %rdx
				movl	$15136, %ecx
				movq	%rdx, 5393(%rsp)
				movq	%rcx, 5401(%rsp)
				movb	$0, 5409(%rsp)
				movw	$0, 5410(%rsp)
				movl	$0, 5412(%rsp)
				leaq	5416(%rsp), %rdi
				movl	$27, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$26, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, 1280(%rsp)
				movq	%rdx, 1288(%rsp)
		.LVL19:
				movb	$26, 1280(%rsp)
		.LBE200:
		.LBB201:
		.LBB202:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	1528(%rsp)
				pushq	1528(%rsp)
				call	_imp_printstring@PLT
		.LVL20:
		.LBE202:
		.LBE201:
		.LBB203:
		.LBB204:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL21:
		.LDL3:
		.LDL4:
		.LBE204:
		.LBE203:
		.LBB205:
		.LBB206:
				call	_imp_newline@PLT
		.LVL22:
		.LDL5:
		.LBE206:
		.LBE205:
		.LBB207:
  100   %else
  101     print string("a * b // c * d uses some weird non-standard combination of precedence and associativity!"); newline
  102   %finish
  103   newline
  104
  105
  106   %const %integer p = 4, q = 3, r = 2
  107   %integer y
  108
  109   y = p ^^ q ^^ r
  110
  111   %if y = 262144 %start
  112     print string("p ^^ q ^^ r is right associative, i.e. p ^^ (q ^^ r)"); newline
  113     newline
  114     print string("This grammar would support the above:"); newline
  115     newline
  116     print string("P<expr> = <term> <exp-term-list> ;"); newline
  117     print string("P<exp-term-list> = <exp-term> <exp-term-list> | ;"); newline
  118     print string("P<exp-term> = ""^^"" <term> ;"); newline
  119   %else %if y = 4096
  120     print string("p ^^ q ^^ r is left associative, i.e. (p ^^ q) ^^ r"); newline
				movabsq	$6782545422656086128, %rdx
				movabsq	$7791354250704068702, %rcx
				movq	%rdx, 5377(%rsp)
				movq	%rcx, 5385(%rsp)
				movabsq	$8030889421525247589, %rdx
				movabsq	$3199093305612790115, %rcx
				movq	%rdx, 5393(%rsp)
				movq	%rcx, 5401(%rsp)
				movabsq	$8081744914954479904, %rdx
				movabsq	$6782466604671065632, %rcx
				movq	%rdx, 5409(%rsp)
				movq	%rcx, 5417(%rsp)
				movq	$7479390, 5425(%rsp)
				movq	$0, 5433(%rsp)
				movb	$0, 5441(%rsp)
				movw	$0, 5442(%rsp)
				movl	$0, 5444(%rsp)
				leaq	5448(%rsp), %rdi
				movl	$23, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$51, 5376(%rsp)
				movq	5376(%rsp), %rax
				movq	5384(%rsp), %rdx
				movq	%rax, 1536(%rsp)
				movq	%rdx, 1544(%rsp)
		.LVL23:
				movb	$51, 1536(%rsp)
		.LBE207:
		.LBB208:
		.LBB209:
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	5624(%rsp)
				pushq	1784(%rsp)
				pushq	1784(%rsp)
				call	_imp_printstring@PLT
		.LVL24:
		.LBE209:
		.LBE208:
		.LBB210:
		.LBB211:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL25:
		.LBE211:
		.LBE210:
		.LBB212:
		.LBB213:
				call	_imp_newline@PLT
		.LVL26:
		.LBE213:
		.LBE212:
		.LBB214:
  121     newline
  122     print string("This grammar would support the above:"); newline
				movq	%r14, 5121(%rsp)
				movq	%r15, 5129(%rsp)
				movq	%r12, 5137(%rsp)
				movq	%r13, 5145(%rsp)
				movabsq	$250810363746, %rax
				movl	$0, %edx
				movq	%rax, 5153(%rsp)
				movq	%rdx, 5161(%rsp)
				movb	$0, 5169(%rsp)
				movw	$0, 5170(%rsp)
				movl	$0, 5172(%rsp)
				leaq	5176(%rsp), %rdi
				movl	$25, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$37, 5120(%rsp)
				movq	5120(%rsp), %rax
				movq	5128(%rsp), %rdx
				movq	%rax, 1792(%rsp)
				movq	%rdx, 1800(%rsp)
		.LVL27:
				movb	$37, 1792(%rsp)
		.LBE214:
		.LBB215:
		.LBB216:
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	5368(%rsp)
				pushq	2040(%rsp)
				pushq	2040(%rsp)
				call	_imp_printstring@PLT
		.LVL28:
		.LBE216:
		.LBE215:
		.LBB217:
		.LBB218:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL29:
		.LBE218:
		.LBE217:
		.LBB219:
		.LBB220:
				call	_imp_newline@PLT
		.LVL30:
		.LBE220:
		.LBE219:
		.LBB221:
  123     newline
  124     print string("P<expr> = <term-exp-list> <term> ;"); newline
				movabsq	$2323420285151558736, %rsi
				movabsq	$3273398284235579453, %rdi
				movq	%rsi, 4865(%rsp)
				movq	%rdi, 4873(%rsp)
				movabsq	$8391166444061096037, %rax
				movabsq	$4498377382880354366, %rdx
				movq	%rax, 4881(%rsp)
				movq	%rdx, 4889(%rsp)
				movq	$15136, 4897(%rsp)
				movq	$0, 4905(%rsp)
				movb	$0, 4913(%rsp)
				movw	$0, 4914(%rsp)
				movl	$0, 4916(%rsp)
				leaq	4920(%rsp), %rdi
				movl	$25, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$34, 4864(%rsp)
				movq	4864(%rsp), %rax
				movq	4872(%rsp), %rdx
				movq	%rax, 2048(%rsp)
				movq	%rdx, 2056(%rsp)
		.LVL31:
				movb	$34, 2048(%rsp)
		.LBE221:
		.LBB222:
		.LBB223:
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	5112(%rsp)
				pushq	2296(%rsp)
				pushq	2296(%rsp)
				call	_imp_printstring@PLT
		.LVL32:
		.LBE223:
		.LBE222:
		.LBB224:
		.LBB225:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL33:
		.LBE225:
		.LBE224:
		.LBB226:
  125     print string("P<term-exp-list> = <term-exp> <term-exp-list> | ;"); newline
				movabsq	$7290603709878516816, %rax
				movabsq	$4500348824273645688, %rdx
				movq	%rax, 4609(%rsp)
				movq	%rdx, 4617(%rsp)
				movabsq	$7886477447378517280, %rax
				movabsq	$8375604859549279533, %rdx
				movq	%rax, 4625(%rsp)
				movq	%rdx, 4633(%rsp)
				movabsq	$3274249305047528037, %rax
				movabsq	$2340781358939597164, %rdx
				movq	%rax, 4641(%rsp)
				movq	%rdx, 4649(%rsp)
				movq	$59, 4657(%rsp)
				movq	$0, 4665(%rsp)
				movb	$0, 4673(%rsp)
				movw	$0, 4674(%rsp)
				movl	$0, 4676(%rsp)
				leaq	4680(%rsp), %rdi
				movl	$23, %ecx
				movq	%rbx, %rax
				rep stosq
				movb	$49, 4608(%rsp)
				movq	4608(%rsp), %rax
				movq	4616(%rsp), %rdx
				movq	%rax, 2304(%rsp)
				movq	%rdx, 2312(%rsp)
		.LVL34:
				movb	$49, 2304(%rsp)
		.LBE226:
		.LBB227:
		.LBB228:
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	4856(%rsp)
				pushq	2552(%rsp)
				pushq	2552(%rsp)
				call	_imp_printstring@PLT
		.LVL35:
		.LBE228:
		.LBE227:
		.LBB229:
		.LBB230:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL36:
		.LBE230:
		.LBE229:
		.LBB231:
  126     print string("P<term-exp> = <term> ""^^"" ;"); newline
				movabsq	$7290603709878516816, %rax
				movabsq	$8375604853908336760, %rdx
				movq	%rax, 4353(%rsp)
				movq	%rdx, 4361(%rsp)
				movabsq	$6799910009257685605, %rax
				movl	$3874850, %edx
				movq	%rax, 4369(%rsp)
				movq	%rdx, 4377(%rsp)
				movb	$0, 4385(%rsp)
				movw	$0, 4386(%rsp)
				movl	$0, 4388(%rsp)
				leaq	4392(%rsp), %rdi
				movl	$27, %ecx
				movl	$0, %eax
				rep stosq
				movb	$27, 4352(%rsp)
				movq	4352(%rsp), %rax
				movq	4360(%rsp), %rdx
				movq	%rax, 2560(%rsp)
				movq	%rdx, 2568(%rsp)
		.LVL37:
				movb	$27, 2560(%rsp)
		.LBE231:
		.LBB232:
		.LBB233:
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	4600(%rsp)
				pushq	2808(%rsp)
				pushq	2808(%rsp)
				call	_imp_printstring@PLT
		.LVL38:
		.LBE233:
		.LBE232:
		.LBB234:
		.LBB235:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL39:
		.LDL6:
		.LBE235:
		.LBE234:
		.LBB236:
		.LBB237:
				call	_imp_newline@PLT
		.LVL40:
		.LBE237:
		.LBE236:
		.LBB238:
		.LBB239:
				movl	$0, %edi
				call	exit@PLT
		.LVL41:
		.LBE239:
		.LBE238:
		.LFE185:
		.Letext0:
  127   %else
  128     print string("p ^^ q ^^ r is something weird! ("); write(y, 0); print string(") - I give up."); newline
  129   %finish
  130   newline
  131
  132 ! The remaining issue to be checked is how left/right associativity interact when the precedence is the same,
  133 ! which is only the case for exponentiation and shifts together, eg
  134 !
  135 ! a << b << c ^^ d ^^ e   or   a ^^ b ^^ c >> d >> e
  136 !
  137
  138 %endofprogram
   89 Statements compiled
