         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.globl	main
		main:
		.LFB189:
				leal	4(%esp), %ecx
				andl	$-16, %esp
				pushl	-4(%ecx)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%ebx
				pushl	%ecx
				subl	$16, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %eax
				subl	$8, %esp
				pushl	4(%eax)
				pushl	(%eax)
				call	_imp_initialise@PLT
				addl	$16, %esp
    2
    3   %byte b
    4   %short sh
    5   %integer i
    6   %longinteger li
    7
    8   b = 255
				movb	$-1, -23(%ebp)
    9   b = 127
				movb	$127, -23(%ebp)
   10   b = -128
				movb	$-128, -23(%ebp)
   11   b = 16_FF
				movb	$-1, -23(%ebp)
   12   b = 16_7F
				movb	$127, -23(%ebp)
   13   b = 16_80
				movb	$-128, -23(%ebp)
   14
   15   sh = 65535        ;! Too big - warning or error - "Short numerical constant too big"  Should cause runtime integer overflow
				movw	$-1, -22(%ebp)
   16   sh = 32767
				movw	$32767, -22(%ebp)
   17   sh = -32768
				movw	$-32768, -22(%ebp)
   18   sh = 16_FFFF      ;! Too big - warning or error - "Short numerical constant too big"  Should cause runtime integer overflow
				movw	$-1, -22(%ebp)
   19   sh = 16_7FFF
				movw	$32767, -22(%ebp)
   20   sh = 16_8000
				movw	$-32768, -22(%ebp)
   21
   22   sh <- b
				movzbl	-23(%ebp), %eax
				movw	%ax, -22(%ebp)
   23   sh = b
				movzbl	-23(%ebp), %eax
				movw	%ax, -22(%ebp)
   24   sh <- i
				movl	-20(%ebp), %eax
				movw	%ax, -22(%ebp)
   25   sh <- li
				movl	-16(%ebp), %eax
				movw	%ax, -22(%ebp)
   26
   27   ! i = 4294967295    ;! Too big - type error
   28   i = 2147483647
				movl	$2147483647, -20(%ebp)
   29   ! i = -2147483648   ;! Too big - type error!  Because it is compiled as -(2147483648)
   30   i = -2147483647     ;! Too big - type error!  Because it is compiled as -(2147483648)
				movl	$-2147483647, -20(%ebp)
   31   i = 16_FFFFFFFF     ;! Too big - warning or error  Should cause runtime integer overflow
				movl	$-1, -20(%ebp)
   32   i = 16_7FFFFFFF
				movl	$2147483647, -20(%ebp)
   33   i = 16_80000000
				movl	$-2147483648, -20(%ebp)
   34
   35   i <- b
				movzbl	-23(%ebp), %eax
				movl	%eax, -20(%ebp)
   36   i = b
				movzbl	-23(%ebp), %eax
				movl	%eax, -20(%ebp)
   37   i <- sh
				movswl	-22(%ebp), %eax
				movl	%eax, -20(%ebp)
   38   i = sh
				movswl	-22(%ebp), %eax
				movl	%eax, -20(%ebp)
   39   i <- li
				movl	-16(%ebp), %eax
				movl	%eax, -20(%ebp)
   40
   41   ! li = 18446744073709551615  ;! Too big - type error
   42   ! li = -9223372036854775808  ;! Too big - type error
   43   ! li =  9223372036854775807  ;! Too big - type error
   44
   45   li = 16_FFFFFFFFFFFFFFFF        ;! These three are accepted, but I believe will be truncated because our pass1 is 32-bit    Should cause runtime integer overflow
				movl	$-1, -16(%ebp)
   46   li = 16_7FFFFFFFFFFFFFFF
				movl	$-1, -16(%ebp)
   47   li = 16_8000000000000000
				movl	$0, -16(%ebp)
   48
   49   li <- b
				movzbl	-23(%ebp), %eax
				movl	%eax, -16(%ebp)
   50   li = b
				movzbl	-23(%ebp), %eax
				movl	%eax, -16(%ebp)
   51   li <- sh
				movswl	-22(%ebp), %eax
				movl	%eax, -16(%ebp)
   52   li = sh
				movswl	-22(%ebp), %eax
				movl	%eax, -16(%ebp)
   53   li <- i
				movl	-20(%ebp), %eax
				movl	%eax, -16(%ebp)
   54   li = i
				movl	-20(%ebp), %eax
				movl	%eax, -16(%ebp)
				movl	$0, -12(%ebp)
		.LBB4:
		.LBB5:
				subl	$12, %esp
				pushl	-12(%ebp)
				call	exit@PLT
		.LBE5:
		.LBE4:
		.LFE189:
				.section	.text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
				.globl	__x86.get_pc_thunk.bx
				.hidden	__x86.get_pc_thunk.bx
		__x86.get_pc_thunk.bx:
		.LFB190:
				movl	(%esp), %ebx
				ret
		.LFE190:
		.Letext0:
   55
   56 %endofprogram
   41 Statements compiled
