[Info-vax] Native compilers

John Reagan xyzzy1959 at gmail.com
Mon Feb 21 21:01:23 EST 2022


On Monday, February 21, 2022 at 2:26:44 PM UTC-5, Simon Clubley wrote:
> On 2022-02-19, John Reagan <xyzz... at gmail.com> wrote: 
> > With all the various threads talking about compilers and such, here's a "demo" (compilers are hard to demo) of a the native Macro compiler. 
> > 
> > $ type hw.mar 
> > .TITLE hello 
> > .PSECT RDATA,NOWRT,SHR,NOPIC,NOEXE,RD,QUAD 
> > HI: .ASCID /Hello, World!/ 
> > .PSECT CODE,NOWRT,SHR,PIC,EXE,RD,QUAD 
> > START:: .CALL_ENTRY PRESERVE=<>,MAX_ARGS=0,HOME_ARGS=TRUE 
> > PUSHAQ HI 
> > CALLS #1,G^LIB$PUT_OUTPUT 
> > BLBC R0,10$ 
> > MOVL #SS$_NORMAL,R0 
> > 10$: RET 
> > .END START 
> > $ 
> > $ show system /noproc 
> > OpenVMS XG5P-H4S on node X86VMS 19-FEB-2022 13:09:56.72 Uptime 2 03:28:17 
> > $ write sys$output f$getsyi("arch_name") 
> > x86_64 
> > $ macro hw 
> > $ link hw 
> > $ run hw 
> > Hello, World! 
> >
> Is there any chance we can have a look at the generated code for this ? 
> 
> Would be interesting to see what it looks like...
> Simon. 
> 
> -- 
> Simon Clubley, clubley at remove_me.eisner.decus.org-Earth.UFP 
> Walking destinations on a map are further away than they appear.
        .text
        .cfi_sections .eh_frame
        .globl  LIB$PUT_OUTPUT
        .globl  SS$_NORMAL
        .globl  ELF$TFRADR
.set ELF$TFRADR, START
        .file   1 "DKA100:[JREAGAN]HW.MAR;2"
        .section        CODE,"ax", at progbits
        .globl  START
        .type   START, at function
        .p2align        4, 0x90
START:
        .cfi_startproc

                                        # Prologue code for routine START on line 5
        .loc    1 5 0 is_stmt 0         # DKA100:[JREAGAN]HW.MAR;2:5:0
        pushq   %rbp                    # encoding: [0x55]
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp              # encoding: [0x48,0x89,0xe5]
        .cfi_def_cfa_register %rbp
        pushq   %rbx                    # encoding: [0x53]
        .cfi_offset %rbx, -24
        pushq   %r15                    # encoding: [0x41,0x57]
        .cfi_offset %r15, -32
        pushq   %r14                    # encoding: [0x41,0x56]
        .cfi_offset %r14, -40
        pushq   %r13                    # encoding: [0x41,0x55]
        .cfi_offset %r13, -48
        movzbl  %ah, %ebx               # encoding: [0x0f,0xb6,0xdc]
        callq   LIB$ALPHA_REG_VECTOR_BASE at PLT # encoding: [0xe8,A,A,A,A]
                                        #   fixup A - offset: 1, value: LIB$ALPHA_REG_VECTOR_BASE at PLT-4, kind: FK_PCRel_4
        xchgq   %rbx, %rax              # encoding: [0x48,0x93]
        pushq   %r12                    # encoding: [0x41,0x54]
        .cfi_offset %r12, -56
        addq    $-40, %rsp              # encoding: [0x48,0x83,0xc4,0xd8]
        movl    %r9d, 24(%rsp)          # encoding: [0x44,0x89,0x4c,0x24,0x18]
        movl    %r8d, 20(%rsp)          # encoding: [0x44,0x89,0x44,0x24,0x14]
        movl    %ecx, 16(%rsp)          # encoding: [0x89,0x4c,0x24,0x10]
        movl    %edx, 12(%rsp)          # encoding: [0x89,0x54,0x24,0x0c]
        movl    %esi, 8(%rsp)           # encoding: [0x89,0x74,0x24,0x08]
        movl    %edi, 4(%rsp)           # encoding: [0x89,0x7c,0x24,0x04]
        movl    %eax, (%rsp)            # encoding: [0x89,0x04,0x24]
        movq    %rsp, %r12              # encoding: [0x49,0x89,0xe4]
        .loc    1 5 0 prologue_end      # DKA100:[JREAGAN]HW.MAR;2:5:0
_$$L1:

                                        # Processing instruction PUSHAQ on line 6
        .loc    1 58 0                  # DKA100:[JREAGAN]HW.MAR;2:58:0
        movq    _$$PSECT_BASE3 at GOTPCREL(%rip), %r10 # encoding: [0x4c,0x8b,0x15,A,A,A,A]
                                        #   fixup A - offset: 3, value: _$$PSECT_BASE3 at GOTPCREL-4, kind: reloc_riprel_4byte_movq_loa
d
        pushq   %r10                    # encoding: [0x41,0x52]

                                        # Processing instruction CALLS on line 7
        .loc    1 59 0                  # DKA100:[JREAGAN]HW.MAR;2:59:0
        popq    %rdi                    # encoding: [0x5f]
        movq    $256, %rax              # encoding: [0x48,0xc7,0xc0,0x00,0x01,0x00,0x00]
                                        # imm = 0x100
        callq   LIB$PUT_OUTPUT at PLT      # encoding: [0xe8,A,A,A,A]
                                        #   fixup A - offset: 1, value: LIB$PUT_OUTPUT at PLT-4, kind: FK_PCRel_4
        movq    %rax, (%rbx)            # encoding: [0x48,0x89,0x03]
        movq    %rdx, 8(%rbx)           # encoding: [0x48,0x89,0x53,0x08]

                                        # Processing instruction BLBC on line 8
        .loc    1 60 0                  # DKA100:[JREAGAN]HW.MAR;2:60:0
        btq     $0, (%rbx)              # encoding: [0x48,0x0f,0xba,0x23,0x00]
        jae     5_10$                   # encoding: [0x0f,0x83,A,A,A,A]
                                        #   fixup A - offset: 2, value: 5_10$-4, kind: FK_PCRel_4

                                        # Processing instruction MOVL on line 9
        .loc    1 61 0                  # DKA100:[JREAGAN]HW.MAR;2:61:0
        movq    SS$_NORMAL at GOTPCREL(%rip), %r10 # encoding: [0x4c,0x8b,0x15,A,A,A,A]
                                        #   fixup A - offset: 3, value: SS$_NORMAL at GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
        movq    %r10, (%rbx)            # encoding: [0x4c,0x89,0x13]
5_10$:

                                        # Processing instruction RET on line 10
        .loc    1 62 0                  # DKA100:[JREAGAN]HW.MAR;2:62:0
_$$_0:
        .loc    1 62 0 epilogue_begin   # DKA100:[JREAGAN]HW.MAR;2:62:0
        leaq    -40(%rbp), %rsp         # encoding: [0x48,0x8d,0x65,0xd8]
        andb    $-2, 240(%rbx)          # encoding: [0x80,0xa3,0xf0,0x00,0x00,0x00,0xfe]
        movq    (%rbx), %rax            # encoding: [0x48,0x8b,0x03]
        movq    8(%rbx), %rdx           # encoding: [0x48,0x8b,0x53,0x08]
        popq    %r12                    # encoding: [0x41,0x5c]
        .cfi_restore %r12
        popq    %r13                    # encoding: [0x41,0x5d]
        .cfi_restore %r13
        popq    %r14                    # encoding: [0x41,0x5e]
        .cfi_restore %r14
        popq    %r15                    # encoding: [0x41,0x5f]
        .cfi_restore %r15
        popq    %rbx                    # encoding: [0x5b]
        .cfi_restore %rbx
        popq    %rbp                    # encoding: [0x5d]
        .cfi_restore %rbp
        .cfi_def_cfa %rsp, 8
        retq                            # encoding: [0xc3]
_$$_2:
        .size   START, _$$_2-START
        .cfi_endproc
        .section        ".  ABS  .","a", at progbits
        .section        ". BLANK .","axw", at progbits
        .section        RDATA,"a", at progbits
        .type   _$$PSECT_BASE3, at object
_$$PSECT_BASE3:
        .type   HI, at object
HI:
        .short  13
        .byte   14
        .byte   1
        .long   0_0$
        .type   0_0$, at object
0_0$:
        .ascii  "Hello, World!"
        .section        .note,"", at note
        .quad   8
        .quad   43
        .quad   1
        .ascii  "IPF/VMS"
        .byte   0
        .ascii  "19-FEB-2022 13:12"
        .ascii  "19-FEB-2022 13:12"
        .ascii  "HELLO"
        .byte   0
        .ascii  "V1"
        .byte   0
        .p2align        3
        .quad   8
        .quad   14
        .quad   2
        .ascii  "IPF/VMS"
        .byte   0
        .ascii  "XMAC X6.0-109"
        .byte   0
        .p2align        3



More information about the Info-vax mailing list