         Edinburgh IMP77 Compiler - Version 8.4
    1 !%include "crc32.inc"
		.Ltext0:
				.data
				.align 32
		CRCTABLE:
				.long	0
				.long	1996959894
				.long	-301047508
				.long	-1727442502
				.long	124634137
				.long	1886057615
				.long	-379345611
				.long	-1637575261
				.long	249268274
				.long	2044508324
				.long	-522852066
				.long	-1747789432
				.long	162941995
				.long	2125561021
				.long	-407360249
				.long	-1866523247
				.long	498536548
				.long	1789927666
				.long	-205950648
				.long	-2067906082
				.long	450548861
				.long	1843258603
				.long	-187386543
				.long	-2083289657
				.long	325883990
				.long	1684777152
				.long	-43845254
				.long	-1973040660
				.long	335633487
				.long	1661365465
				.long	-99664541
				.long	-1928851979
				.long	997073096
				.long	1281953886
				.long	-715111964
				.long	-1570279054
				.long	1006888145
				.long	1258607687
				.long	-770865667
				.long	-1526024853
				.long	901097722
				.long	1119000684
				.long	-608450090
				.long	-1396901568
				.long	853044451
				.long	1172266101
				.long	-589951537
				.long	-1412350631
				.long	651767980
				.long	1373503546
				.long	-925412992
				.long	-1076862698
				.long	565507253
				.long	1454621731
				.long	-809855591
				.long	-1195530993
				.long	671266974
				.long	1594198024
				.long	-972236366
				.long	-1324619484
				.long	795835527
				.long	1483230225
				.long	-1050600021
				.long	-1234817731
				.long	1994146192
				.long	31158534
				.long	-1731059524
				.long	-271249366
				.long	1907459465
				.long	112637215
				.long	-1614814043
				.long	-390540237
				.long	2013776290
				.long	251722036
				.long	-1777751922
				.long	-519137256
				.long	2137656763
				.long	141376813
				.long	-1855689577
				.long	-429695999
				.long	1802195444
				.long	476864866
				.long	-2056965928
				.long	-228458418
				.long	1812370925
				.long	453092731
				.long	-2113342271
				.long	-183516073
				.long	1706088902
				.long	314042704
				.long	-1950435094
				.long	-54949764
				.long	1658658271
				.long	366619977
				.long	-1932296973
				.long	-69972891
				.long	1303535960
				.long	984961486
				.long	-1547960204
				.long	-725929758
				.long	1256170817
				.long	1037604311
				.long	-1529756563
				.long	-740887301
				.long	1131014506
				.long	879679996
				.long	-1385723834
				.long	-631195440
				.long	1141124467
				.long	855842277
				.long	-1442165665
				.long	-586318647
				.long	1342533948
				.long	654459306
				.long	-1106571248
				.long	-921952122
				.long	1466479909
				.long	544179635
				.long	-1184443383
				.long	-832445281
				.long	1591671054
				.long	702138776
				.long	-1328506846
				.long	-942167884
				.long	1504918807
				.long	783551873
				.long	-1212326853
				.long	-1061524307
				.long	-306674912
				.long	-1698712650
				.long	62317068
				.long	1957810842
				.long	-355121351
				.long	-1647151185
				.long	81470997
				.long	1943803523
				.long	-480048366
				.long	-1805370492
				.long	225274430
				.long	2053790376
				.long	-468791541
				.long	-1828061283
				.long	167816743
				.long	2097651377
				.long	-267414716
				.long	-2029476910
				.long	503444072
				.long	1762050814
				.long	-144550051
				.long	-2140837941
				.long	426522225
				.long	1852507879
				.long	-19653770
				.long	-1982649376
				.long	282753626
				.long	1742555852
				.long	-105259153
				.long	-1900089351
				.long	397917763
				.long	1622183637
				.long	-690576408
				.long	-1580100738
				.long	953729732
				.long	1340076626
				.long	-776247311
				.long	-1497606297
				.long	1068828381
				.long	1219638859
				.long	-670225446
				.long	-1358292148
				.long	906185462
				.long	1090812512
				.long	-547295293
				.long	-1469587627
				.long	829329135
				.long	1181335161
				.long	-882789492
				.long	-1134132454
				.long	628085408
				.long	1382605366
				.long	-871598187
				.long	-1156888829
				.long	570562233
				.long	1426400815
				.long	-977650754
				.long	-1296233688
				.long	733239954
				.long	1555261956
				.long	-1026031705
				.long	-1244606671
				.long	752459403
				.long	1541320221
				.long	-1687895376
				.long	-328994266
				.long	1969922972
				.long	40735498
				.long	-1677130071
				.long	-351390145
				.long	1913087877
				.long	83908371
				.long	-1782625662
				.long	-491226604
				.long	2075208622
				.long	213261112
				.long	-1831694693
				.long	-438977011
				.long	2094854071
				.long	198958881
				.long	-2032938284
				.long	-237706686
				.long	1759359992
				.long	534414190
				.long	-2118248755
				.long	-155638181
				.long	1873836001
				.long	414664567
				.long	-2012718362
				.long	-15766928
				.long	1711684554
				.long	285281116
				.long	-1889165569
				.long	-127750551
				.long	1634467795
				.long	376229701
				.long	-1609899400
				.long	-686959890
				.long	1308918612
				.long	956543938
				.long	-1486412191
				.long	-799009033
				.long	1231636301
				.long	1047427035
				.long	-1362007478
				.long	-640263460
				.long	1088359270
				.long	936918000
				.long	-1447252397
				.long	-558129467
				.long	1202900863
				.long	817233897
				.long	-1111625188
				.long	-893730166
				.long	1404277552
				.long	615818150
				.long	-1160759803
				.long	-841546093
				.long	1423857449
				.long	601450431
				.long	-1285129682
				.long	-1000256840
				.long	1567103746
				.long	711928724
				.long	-1274298825
				.long	-1022587231
				.long	1510334235
				.long	755167117
				.globl	CRCTABLE_dv
				.section	.data.rel.local,"aw",@progbits
				.align 32
		CRCTABLE_dv:
				.long	CRCTABLE
				.long	4
				.zero	60
				.globl	CRC32CH
		CRC32CH:
		.LFB189:
    2
    3 ! crc32.imp -- compute the CRC-32 of a data stream
    4 ! Copyright (C) 1995-1998 Mark Adler
    5 ! For conditions of distribution and use, see copyright notice in zlib.h
    6
    7 ! ========================================================================
    8 ! Table of CRC-32's of all single-byte values (made by make_crc table)
    9
   10 %own %integer %array crc table(0:255) =
   11   16_00000000, 16_77073096, 16_ee0e612c, 16_990951ba, 16_076dc419,
   12   16_706af48f, 16_e963a535, 16_9e6495a3, 16_0edb8832, 16_79dcb8a4,
   13   16_e0d5e91e, 16_97d2d988, 16_09b64c2b, 16_7eb17cbd, 16_e7b82d07,
   14   16_90bf1d91, 16_1db71064, 16_6ab020f2, 16_f3b97148, 16_84be41de,
   15   16_1adad47d, 16_6ddde4eb, 16_f4d4b551, 16_83d385c7, 16_136c9856,
   16   16_646ba8c0, 16_fd62f97a, 16_8a65c9ec, 16_14015c4f, 16_63066cd9,
   17   16_fa0f3d63, 16_8d080df5, 16_3b6e20c8, 16_4c69105e, 16_d56041e4,
   18   16_a2677172, 16_3c03e4d1, 16_4b04d447, 16_d20d85fd, 16_a50ab56b,
   19   16_35b5a8fa, 16_42b2986c, 16_dbbbc9d6, 16_acbcf940, 16_32d86ce3,
   20   16_45df5c75, 16_dcd60dcf, 16_abd13d59, 16_26d930ac, 16_51de003a,
   21   16_c8d75180, 16_bfd06116, 16_21b4f4b5, 16_56b3c423, 16_cfba9599,
   22   16_b8bda50f, 16_2802b89e, 16_5f058808, 16_c60cd9b2, 16_b10be924,
   23   16_2f6f7c87, 16_58684c11, 16_c1611dab, 16_b6662d3d, 16_76dc4190,
   24   16_01db7106, 16_98d220bc, 16_efd5102a, 16_71b18589, 16_06b6b51f,
   25   16_9fbfe4a5, 16_e8b8d433, 16_7807c9a2, 16_0f00f934, 16_9609a88e,
   26   16_e10e9818, 16_7f6a0dbb, 16_086d3d2d, 16_91646c97, 16_e6635c01,
   27   16_6b6b51f4, 16_1c6c6162, 16_856530d8, 16_f262004e, 16_6c0695ed,
   28   16_1b01a57b, 16_8208f4c1, 16_f50fc457, 16_65b0d9c6, 16_12b7e950,
   29   16_8bbeb8ea, 16_fcb9887c, 16_62dd1ddf, 16_15da2d49, 16_8cd37cf3,
   30   16_fbd44c65, 16_4db26158, 16_3ab551ce, 16_a3bc0074, 16_d4bb30e2,
   31   16_4adfa541, 16_3dd895d7, 16_a4d1c46d, 16_d3d6f4fb, 16_4369e96a,
   32   16_346ed9fc, 16_ad678846, 16_da60b8d0, 16_44042d73, 16_33031de5,
   33   16_aa0a4c5f, 16_dd0d7cc9, 16_5005713c, 16_270241aa, 16_be0b1010,
   34   16_c90c2086, 16_5768b525, 16_206f85b3, 16_b966d409, 16_ce61e49f,
   35   16_5edef90e, 16_29d9c998, 16_b0d09822, 16_c7d7a8b4, 16_59b33d17,
   36   16_2eb40d81, 16_b7bd5c3b, 16_c0ba6cad, 16_edb88320, 16_9abfb3b6,
   37   16_03b6e20c, 16_74b1d29a, 16_ead54739, 16_9dd277af, 16_04db2615,
   38   16_73dc1683, 16_e3630b12, 16_94643b84, 16_0d6d6a3e, 16_7a6a5aa8,
   39   16_e40ecf0b, 16_9309ff9d, 16_0a00ae27, 16_7d079eb1, 16_f00f9344,
   40   16_8708a3d2, 16_1e01f268, 16_6906c2fe, 16_f762575d, 16_806567cb,
   41   16_196c3671, 16_6e6b06e7, 16_fed41b76, 16_89d32be0, 16_10da7a5a,
   42   16_67dd4acc, 16_f9b9df6f, 16_8ebeeff9, 16_17b7be43, 16_60b08ed5,
   43   16_d6d6a3e8, 16_a1d1937e, 16_38d8c2c4, 16_4fdff252, 16_d1bb67f1,
   44   16_a6bc5767, 16_3fb506dd, 16_48b2364b, 16_d80d2bda, 16_af0a1b4c,
   45   16_36034af6, 16_41047a60, 16_df60efc3, 16_a867df55, 16_316e8eef,
   46   16_4669be79, 16_cb61b38c, 16_bc66831a, 16_256fd2a0, 16_5268e236,
   47   16_cc0c7795, 16_bb0b4703, 16_220216b9, 16_5505262f, 16_c5ba3bbe,
   48   16_b2bd0b28, 16_2bb45a92, 16_5cb36a04, 16_c2d7ffa7, 16_b5d0cf31,
   49   16_2cd99e8b, 16_5bdeae1d, 16_9b64c2b0, 16_ec63f226, 16_756aa39c,
   50   16_026d930a, 16_9c0906a9, 16_eb0e363f, 16_72076785, 16_05005713,
   51   16_95bf4a82, 16_e2b87a14, 16_7bb12bae, 16_0cb61b38, 16_92d28e9b,
   52   16_e5d5be0d, 16_7cdcefb7, 16_0bdbdf21, 16_86d3d2d4, 16_f1d4e242,
   53   16_68ddb3f8, 16_1fda836e, 16_81be16cd, 16_f6b9265b, 16_6fb077e1,
   54   16_18b74777, 16_88085ae6, 16_ff0f6a70, 16_66063bca, 16_11010b5c,
   55   16_8f659eff, 16_f862ae69, 16_616bffd3, 16_166ccf45, 16_a00ae278,
   56   16_d70dd2ee, 16_4e048354, 16_3903b3c2, 16_a7672661, 16_d06016f7,
   57   16_4969474d, 16_3e6e77db, 16_aed16a4a, 16_d9d65adc, 16_40df0b66,
   58   16_37d83bf0, 16_a9bcae53, 16_debb9ec5, 16_47b2cf7f, 16_30b5ffe9,
   59   16_bdbdf21c, 16_cabac28a, 16_53b39330, 16_24b4a3a6, 16_bad03605,
   60   16_cdd70693, 16_54de5729, 16_23d967bf, 16_b3667a2e, 16_c4614ab8,
   61   16_5d681b02, 16_2a6f2b94, 16_b40bbe37, 16_c30c8ea1, 16_5a05df1b,
   62   16_2d02ef8d
   63
   64
   65 ! =========================================================================
   66
   67 %external %long %fn crc32 ch (%long crc, %byte %integer c)
				pushl	%ebp
				movl	%esp, %ebp
				subl	$4, %esp
				call	__x86.get_pc_thunk.ax
				addl	$_GLOBAL_OFFSET_TABLE_, %eax
				movl	12(%ebp), %edx
				movb	%dl, -4(%ebp)
   68   crc = crc !! 16_FFFFFFFF
				notl	8(%ebp)
   69   !printstring("> crc = crc table((");write(crc,0);printstring(" !! ");write(c,0);printstring(") & 16_ff) !! (");write(crc,0);printstring(" >> 8)");newline
   70   crc = crc table((crc !! c) & 16_ff) !! (crc >> 8)
				movzbl	-4(%ebp), %edx
				xorl	8(%ebp), %edx
				movzbl	%dl, %edx
				movl	CRCTABLE@GOTOFF(%eax,%edx,4), %eax
				movl	%eax, %edx
				movl	8(%ebp), %eax
				shrl	$8, %eax
				xorl	%edx, %eax
				movl	%eax, 8(%ebp)
   71   !printstring("< crc = crc table((");write((crc!!c)&255,0);printstring(") !! ");write(crc>>8,0);newline
   72   %result = crc !! 16_FFFFFFFF
				movl	8(%ebp), %eax
				notl	%eax
   73 %end
				leave
				ret
		.LFE189:
				.globl	CRC32MEM
		CRC32MEM:
		.LFB190:
   74
   75 %external %long %fn crc32 mem (%long crc, %integer memp, %integer length)
				pushl	%ebp
				movl	%esp, %ebp
				subl	$16, %esp
				call	__x86.get_pc_thunk.ax
				addl	$_GLOBAL_OFFSET_TABLE_, %eax
		.L4:
   76 !printstring("addr: "); write(memp,0);
   77 !newline
   78 !printstring("length: "); write(length,0);
   79 !newline
   80   %while length > 0 %cycle
				cmpl	$0, 16(%ebp)
				jle	.L10
				nop
		.L6:
   81     crc = crc32 ch(crc, byteinteger(memp))
				movl	12(%ebp), %eax
				movl	%eax, -4(%ebp)
		.LBB6:
		.LBB7:
				movl	-4(%ebp), %eax
		.LBE7:
		.LBE6:
				movzbl	(%eax), %eax
				movzbl	%al, %eax
				pushl	%eax
				pushl	8(%ebp)
				call	CRC32CH
				addl	$8, %esp
				movl	%eax, 8(%ebp)
   82     memp = memp+1
				addl	$1, 12(%ebp)
   83     length = length-1
				subl	$1, 16(%ebp)
   84   %repeat
				jmp	.L4
		.L10:
   85 !printstring("result: "); write(crc,0);newline
   86   %result = crc
				movl	8(%ebp), %eax
   87 %end
				leave
				ret
		.LFE190:
				.globl	CRC32
		CRC32:
		.LFB191:
   88
   89 %external %long %fn crc32 (%name memp, %integer length)
				pushl	%ebp
				movl	%esp, %ebp
				subl	$16, %esp
				call	__x86.get_pc_thunk.ax
				addl	$_GLOBAL_OFFSET_TABLE_, %eax
   90   %integer crc = 0
				movl	$0, -8(%ebp)
				movl	8(%ebp), %eax
				movl	%eax, -4(%ebp)
		.LBB8:
		.LBB9:
				movl	-4(%ebp), %eax
		.LBE9:
		.LBE8:
   91   %result = crc32 mem(crc, ADDR(memp), length)
				pushl	12(%ebp)
				pushl	%eax
				pushl	-8(%ebp)
				call	CRC32MEM
				addl	$12, %esp
   92 %end
				leave
				ret
		.LFE191:
				.section	.text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat
				.globl	__x86.get_pc_thunk.ax
				.hidden	__x86.get_pc_thunk.ax
		__x86.get_pc_thunk.ax:
		.LFB192:
				movl	(%esp), %eax
				ret
		.LFE192:
		.Letext0:
   93
   94 !%begin
   95 !  print string("test: "); write(crc32(crc table, 256*4), 0); newline
   96 !%end %of %program
   97
   98 %end %of %file
   19 Statements compiled
