         Edinburgh IMP77 Compiler - Version 8.4-2024.12.18

     1  %begin
 0000 C8 00 00 01                           ENTER 0000,1
     2  
     3    %longreal x, r
     4    
     5    %integer i
     6    %longrealname rn
     7    %longrealarray rra(0:9)
 0004 C7 45 D4 01 00 00 00                  MOV DWORD PTR [%EBP-44],#1
 000B C7 45 D8 00 00 00 00                  MOV DWORD PTR [%EBP-40],#0
 0012 C7 45 DC 09 00 00 00                  MOV DWORD PTR [%EBP-36],#9
 0019 C7 45 E0 11 01 00 00                  MOV DWORD PTR [%EBP-32],#273
 0020 8D 45 D4                              LEA %EAX,[%EBP-44]
 0023 50                                    PUSH %EAX
 0024 E8 0A 00                              CALL '_IMPADEF' (EXTERN 10)
 0027 83 C4 04                              ADD %ESP,#4
 002A 8D 4D D4                              LEA %ECX,[%EBP-44]
 002D 89 E3                                 MOV %EBX,%ESP
 002F 29 D3                                 SUB %EBX,%EDX
 0031 89 5D CC                              MOV [%EBP-52],%EBX
 0034 89 4D D0                              MOV [%EBP-48],%ECX
 0037 01 C3                                 ADD %EBX,%EAX
 0039 89 DC                                 MOV %ESP,%EBX
     8    %longrealnamearray rna(0:9)
 003B C7 45 BC 01 00 00 00                  MOV DWORD PTR [%EBP-68],#1
 0042 C7 45 C0 00 00 00 00                  MOV DWORD PTR [%EBP-64],#0
 0049 C7 45 C4 09 00 00 00                  MOV DWORD PTR [%EBP-60],#9
 0050 C7 45 C8 91 00 00 00                  MOV DWORD PTR [%EBP-56],#145
 0057 8D 45 BC                              LEA %EAX,[%EBP-68]
 005A 50                                    PUSH %EAX
 005B E8 0A 00                              CALL '_IMPADEF' (EXTERN 10)
 005E 83 C4 04                              ADD %ESP,#4
 0061 8D 4D BC                              LEA %ECX,[%EBP-68]
 0064 89 E3                                 MOV %EBX,%ESP
 0066 29 D3                                 SUB %EBX,%EDX
 0068 89 5D B4                              MOV [%EBP-76],%EBX
 006B 89 4D B8                              MOV [%EBP-72],%ECX
 006E 01 C3                                 ADD %EBX,%EAX
 0070 89 DC                                 MOV %ESP,%EBX
     9    %longrealnamearrayname rnan
    10    %longrealmap rm(%integer i); %result == r; %end
 0072 EB 00                                 JMP L1001
 0074                      L1002  EQU $
 0074 C8 00 00 02                           ENTER 0000,2
 0078 8B 75 FC                              MOV %ESI,[%EBP-4]
 007B 8D 46 EC                              LEA %EAX,[%ESI-20]
 007E C9                                    LEAVE
 007F C3                                    RET
 0080                      L1001  EQU $
?I unused
    11    %longrealmap rm2(%integer i); %result == rn; %end
?I unused
    12    %longrealmap rm3(%integer i); %result == rra(i); %end
    13    %longrealmap rm4(%integer i); %result == rna(i); %end
    14    %longrealmap rm5(%integer i); %result == rnan(i); %end
    15    rn == r
    16    x = r
 0080                      L1003  EQU $
 0080 C8 00 00 02                           ENTER 0000,2
 0084 8B 7D FC                              MOV %EDI,[%EBP-4]
 0087 8B 47 E4                              MOV %EAX,[%EDI-28]
 008A C9                                    LEAVE
 008B C3                                    RET
 008C                      L1001  EQU $
 008C                      L1004  EQU $
 008C C8 00 00 02                           ENTER 0000,2
 0090 FF 75 08                              PUSH DWORD PTR [%EBP+8]
 0093 8B 5D FC                              MOV %EBX,[%EBP-4]
 0096 FF 73 D0                              PUSH DWORD PTR [%EBX-48]
 0099 89 5D F4                              MOV [%EBP-12],%EBX
 009C E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 009F 83 C4 08                              ADD %ESP,#8
 00A2 89 C6                                 MOV %ESI,%EAX
 00A4 8B 7D F4                              MOV %EDI,[%EBP-12]
 00A7 03 77 CC                              ADD %ESI,[%EDI-52]
 00AA 89 F0                                 MOV %EAX,%ESI
 00AC C9                                    LEAVE
 00AD C3                                    RET
 00AE                      L1001  EQU $
 00AE                      L1005  EQU $
 00AE C8 00 00 02                           ENTER 0000,2
 00B2 FF 75 08                              PUSH DWORD PTR [%EBP+8]
 00B5 8B 5D FC                              MOV %EBX,[%EBP-4]
 00B8 FF 73 B8                              PUSH DWORD PTR [%EBX-72]
 00BB 89 5D F4                              MOV [%EBP-12],%EBX
 00BE E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 00C1 83 C4 08                              ADD %ESP,#8
 00C4 89 C6                                 MOV %ESI,%EAX
 00C6 8B 7D F4                              MOV %EDI,[%EBP-12]
 00C9 03 77 B4                              ADD %ESI,[%EDI-76]
 00CC 8B 06                                 MOV %EAX,[%ESI]
 00CE C9                                    LEAVE
 00CF C3                                    RET
 00D0                      L1001  EQU $
 00D0                      L1006  EQU $
 00D0 C8 00 00 02                           ENTER 0000,2
 00D4 FF 75 08                              PUSH DWORD PTR [%EBP+8]
 00D7 8B 5D FC                              MOV %EBX,[%EBP-4]
 00DA FF 73 B0                              PUSH DWORD PTR [%EBX-80]
 00DD 89 5D F4                              MOV [%EBP-12],%EBX
 00E0 E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 00E3 83 C4 08                              ADD %ESP,#8
 00E6 89 C6                                 MOV %ESI,%EAX
 00E8 8B 7D F4                              MOV %EDI,[%EBP-12]
 00EB 03 77 AC                              ADD %ESI,[%EDI-84]
 00EE 8B 06                                 MOV %EAX,[%ESI]
 00F0 C9                                    LEAVE
 00F1 C3                                    RET
 00F2                      L1001  EQU $
 00F2 8D 45 EC                              LEA %EAX,[%EBP-20]
 00F5 89 45 E4                              MOV [%EBP-28],%EAX
 00F8 DD 45 EC                              FLD QWORD [%EBP-20]
 00FB DD 5D F4                              FSTP QWORD [%EBP-12]
    17    x = rn
 00FE 8B 5D E4                              MOV %EBX,[%EBP-28]
 0101 DD 03                                 FLD QWORD [%EBX]
 0103 DD 5D F4                              FSTP QWORD [%EBP-12]
    18    rn = x
 0106 8B 75 E4                              MOV %ESI,[%EBP-28]
 0109 DD 45 F4                              FLD QWORD [%EBP-12]
 010C DD 1E                                 FSTP QWORD [%ESI]
    19    x = rra(i)
 010E FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 0111 FF 75 D0                              PUSH DWORD PTR [%EBP-48]
 0114 E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 0117 83 C4 08                              ADD %ESP,#8
 011A 89 C7                                 MOV %EDI,%EAX
 011C 03 7D CC                              ADD %EDI,[%EBP-52]
 011F DD 07                                 FLD QWORD [%EDI]
 0121 DD 5D F4                              FSTP QWORD [%EBP-12]
    20    rn == rra(i)
 0124 FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 0127 FF 75 D0                              PUSH DWORD PTR [%EBP-48]
 012A E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 012D 83 C4 08                              ADD %ESP,#8
 0130 89 C3                                 MOV %EBX,%EAX
 0132 03 5D CC                              ADD %EBX,[%EBP-52]
 0135 89 5D E4                              MOV [%EBP-28],%EBX
    21    x = rra(i)
 0138 FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 013B FF 75 D0                              PUSH DWORD PTR [%EBP-48]
 013E E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 0141 83 C4 08                              ADD %ESP,#8
 0144 89 C6                                 MOV %ESI,%EAX
 0146 03 75 CC                              ADD %ESI,[%EBP-52]
 0149 DD 06                                 FLD QWORD [%ESI]
 014B DD 5D F4                              FSTP QWORD [%EBP-12]
    22    rra(i) = x
 014E FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 0151 FF 75 D0                              PUSH DWORD PTR [%EBP-48]
 0154 E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 0157 83 C4 08                              ADD %ESP,#8
 015A 89 C7                                 MOV %EDI,%EAX
 015C 03 7D CC                              ADD %EDI,[%EBP-52]
 015F DD 45 F4                              FLD QWORD [%EBP-12]
 0162 DD 1F                                 FSTP QWORD [%EDI]
    23    rn == rna(i)
 0164 FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 0167 FF 75 B8                              PUSH DWORD PTR [%EBP-72]
 016A E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 016D 83 C4 08                              ADD %ESP,#8
 0170 89 C3                                 MOV %EBX,%EAX
 0172 03 5D B4                              ADD %EBX,[%EBP-76]
 0175 8B 1B                                 MOV %EBX,[%EBX]
 0177 89 5D E4                              MOV [%EBP-28],%EBX
    24    x = rna(i)
 017A FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 017D FF 75 B8                              PUSH DWORD PTR [%EBP-72]
 0180 E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 0183 83 C4 08                              ADD %ESP,#8
 0186 89 C6                                 MOV %ESI,%EAX
 0188 03 75 B4                              ADD %ESI,[%EBP-76]
 018B 8B 36                                 MOV %ESI,[%ESI]
 018D DD 06                                 FLD QWORD [%ESI]
 018F DD 5D F4                              FSTP QWORD [%EBP-12]
    25    rnan == rna
 0192 8B 45 B8                              MOV %EAX,[%EBP-72]
 0195 89 45 B0                              MOV [%EBP-80],%EAX
 0198 8B 45 B4                              MOV %EAX,[%EBP-76]
 019B 89 45 AC                              MOV [%EBP-84],%EAX
    26    rn == rnan(i)
 019E FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 01A1 FF 75 B0                              PUSH DWORD PTR [%EBP-80]
 01A4 E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 01A7 83 C4 08                              ADD %ESP,#8
 01AA 89 C7                                 MOV %EDI,%EAX
 01AC 03 7D AC                              ADD %EDI,[%EBP-84]
 01AF 8B 3F                                 MOV %EDI,[%EDI]
 01B1 89 7D E4                              MOV [%EBP-28],%EDI
    27    x = rnan(i)
 01B4 FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 01B7 FF 75 B0                              PUSH DWORD PTR [%EBP-80]
 01BA E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 01BD 83 C4 08                              ADD %ESP,#8
 01C0 89 C3                                 MOV %EBX,%EAX
 01C2 03 5D AC                              ADD %EBX,[%EBP-84]
 01C5 8B 1B                                 MOV %EBX,[%EBX]
 01C7 DD 03                                 FLD QWORD [%EBX]
 01C9 DD 5D F4                              FSTP QWORD [%EBP-12]
    28    rnan(i) = x
 01CC FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 01CF FF 75 B0                              PUSH DWORD PTR [%EBP-80]
 01D2 E8 09 00                              CALL '_IMPAREF' (EXTERN 9)
 01D5 83 C4 08                              ADD %ESP,#8
 01D8 89 C6                                 MOV %ESI,%EAX
 01DA 03 75 AC                              ADD %ESI,[%EBP-84]
 01DD 8B 36                                 MOV %ESI,[%ESI]
 01DF DD 45 F4                              FLD QWORD [%EBP-12]
 01E2 DD 1E                                 FSTP QWORD [%ESI]
    29    rn == rm(i)
 01E4 FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 01E7 E8 00 00                              CALL 'RM' (INTERNAL L1002 )
 01EA 83 C4 04                              ADD %ESP,#4
 01ED 89 45 E4                              MOV [%EBP-28],%EAX
    30    x = rm(i)
 01F0 FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 01F3 E8 00 00                              CALL 'RM' (INTERNAL L1002 )
 01F6 83 C4 04                              ADD %ESP,#4
 01F9 DD 00                                 FLD QWORD [%EAX]
 01FB DD 5D F4                              FSTP QWORD [%EBP-12]
    31    rm(i) = x
 01FE FF 75 E8                              PUSH DWORD PTR [%EBP-24]
 0201 E8 00 00                              CALL 'RM' (INTERNAL L1002 )
 0204 83 C4 04                              ADD %ESP,#4
 0207 DD 45 F4                              FLD QWORD [%EBP-12]
 020A DD 18                                 FSTP QWORD [%EAX]
    32  %endofprogram
 020C C9                                    LEAVE
 020D C3                                    RET
?RM5 unused
?RM4 unused
?RM3 unused
?RM2 unused

    40 Statements compiled



 ELF object file generated from IMP source file: '/home/gtoal/src/compilers101/new-parser/imps/tests/test189.imp'
 +----------+---------------------+---------+---------+---------+------------+
 | Sections |       Symbols       | Code    | Data    | Diag    | Total size |
 +----------+----------+----------+---------+---------+---------+------------+
 |  (count) | Internal | External | (bytes) | (bytes) | (bytes) | (bytes)    |
 +----------+----------+----------+---------+---------+---------+------------+
 |       11 |        9 |        8 |     563 |       0 |     192 |        755 |
 +----------+----------+----------+---------+---------+---------+------------+


