[Info-vax] Native compilers
Craig A. Berry
craigberry at nospam.mac.com
Mon Feb 21 21:52:32 EST 2022
On 2/21/22 8:01 PM, John Reagan wrote:
> 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
Cool. Now we just need MACRO-32 added as one of the source languages here:
https://godbolt.org
More information about the Info-vax
mailing list