[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