         Edinburgh IMP77 Compiler - Version 8.4-2024.12.18

     1  %begin
 0000 C8 00 00 01                           ENTER 0000,1
     2    %integer I
     3    %integername N
     4    %integerfn F
 0004 EB 00                                 JMP L1001
 0006                      L1002  EQU $
 0006 C8 00 00 02                           ENTER 0000,2
     5      %result = I
 000A 8B 75 FC                              MOV %ESI,[%EBP-4]
 000D 8B 46 F8                              MOV %EAX,[%ESI-8]
 0010 C9                                    LEAVE
 0011 C3                                    RET
     6    %end
 0012                      L1001  EQU $
     7    %routine R
     8    %end
 0012                      L1003  EQU $
 0012 C8 00 00 02                           ENTER 0000,2
 0016 C9                                    LEAVE
 0017 C3                                    RET
 0018                      L1001  EQU $
     9    %integermap M
    10      %result == I
 0018                      L1004  EQU $
 0018 C8 00 00 02                           ENTER 0000,2
 001C 8B 7D FC                              MOV %EDI,[%EBP-4]
 001F 8D 47 F8                              LEA %EAX,[%EDI-8]
 0022 C9                                    LEAVE
 0023 C3                                    RET
    11    %end
 0024                      L1001  EQU $
    12    %predicate P
    13      %true
 0024                      L1005  EQU $
 0024 C8 00 00 02                           ENTER 0000,2
 0028 B8 FF FF FF FF                        MOV %EAX,#-1
 002D C9                                    LEAVE
 002E C3                                    RET
    14    %end
 002F                      L1001  EQU $
    15    %if P %start
    16      R
 002F E8 00 00                              CALL 'P' (INTERNAL L1005 )
 0032 3D 00 00 00 00                        CMP %EAX,#0
 0037 74 00                                 JE L1006
 0039 E8 00 00                              CALL 'R' (INTERNAL L1003 )
    17      N == I
 003C 8D 45 F8                              LEA %EAX,[%EBP-8]
 003F 89 45 F4                              MOV [%EBP-12],%EAX
    18      N = I
 0042 8B 5D F4                              MOV %EBX,[%EBP-12]
 0045 8B 45 F8                              MOV %EAX,[%EBP-8]
 0048 89 03                                 MOV [%EBX],%EAX
    19      I = F
 004A E8 00 00                              CALL 'F' (INTERNAL L1002 )
 004D 89 45 F8                              MOV [%EBP-8],%EAX
    20      I = M
 0050 E8 00 00                              CALL 'M' (INTERNAL L1004 )
 0053 8B 00                                 MOV %EAX,[%EAX]
 0055 89 45 F8                              MOV [%EBP-8],%EAX
    21      I = N
 0058 8B 75 F4                              MOV %ESI,[%EBP-12]
 005B 8B 06                                 MOV %EAX,[%ESI]
 005D 89 45 F8                              MOV [%EBP-8],%EAX
    22      M = I
 0060 E8 00 00                              CALL 'M' (INTERNAL L1004 )
 0063 8B 4D F8                              MOV %ECX,[%EBP-8]
 0066 89 08                                 MOV [%EAX],%ECX
    23    %finish
 0068                      L1006  EQU $
    24  %endofprogram
 0068 C9                                    LEAVE
 0069 C3                                    RET

    24 Statements compiled



 ELF object file generated from IMP source file: '/home/gtoal/src/compilers101/new-parser/imps/tests/test191.imp'
 +----------+---------------------+---------+---------+---------+------------+
 | Sections |       Symbols       | Code    | Data    | Diag    | Total size |
 +----------+----------+----------+---------+---------+---------+------------+
 |  (count) | Internal | External | (bytes) | (bytes) | (bytes) | (bytes)    |
 +----------+----------+----------+---------+---------+---------+------------+
 |       11 |        8 |        6 |     116 |       0 |     160 |        276 |
 +----------+----------+----------+---------+---------+---------+------------+


