[Info-vax] VAX Macro to C conversion
VAXman- at SendSpamHere.ORG
VAXman- at SendSpamHere.ORG
Fri Jul 12 16:18:14 EDT 2019
In article <638a7daa-eb17-4f8a-b3f0-18e0bd9da388 at googlegroups.com>, Aron Insinga <aron.insinga at vmssoftware.com> writes:
>On Tuesday, July 9, 2019 at 8:18:14 PM UTC-4, Bill Gunshannon wrote:
>> On 7/9/19 3:08 AM, Simon Clubley wrote:
>> > On 2019-07-08, Dave Froble wrote:
>> >>
>> >> Macro-32 is an assembler on the VAX. On Alpha, itanic, and x86 is is =
>a
>> >> compiled language, and not anything you'd want to use on the non-VAX
>> >> systems. Just ask John. It exists strictly for existing code.
>> >>
>> >=20
>> > It's nothing to do with whether it's an assembler or a compiler.
>>=20
>> Both are merely semantics. Both are programs that take human
>> readable input and generate machine runable object code.
>>=20
>> >=20
>> > It's to do with the fact that assembly language is so low level
>> > and error prone even when compared to C.
>>=20
>> The current MACRO-32 compiler can not be low level by any stretch
>> of the imagination. I can not believe any VAX instruction would
>> map directly and with the same semantics with the instruction set
>> of the Alpha or the IA64. The same would be true for the x86-64.
Of course not. Sheesh!
>A single VAX instruction can be compiled into a _sequence_ of instructions =
>for another machine. A single VAX MACRO ADDL3 instruction might become 4 i=
>nstructions for a RISC machine: load, load, add, and store. Of course the =
>sequence gets more complicated depending on the instruction, the addressing=
> modes, etc.
... and it takes even more code to do it in C. Two equivalent simple adds:
=== MACRO === MACRO === MACRO === MACRO === MACRO === MACRO === MACRO === MACRO ===MACRO === MACRO === MACRO ===MACRO === MACRO ===
00000000 1 .PSECT DATA,WRT,NOEXE,5
00000000 2 A: .LONG 1
00000004 3 B: .LONG 2
00000008 4 C: .LONG 0
0000000C 5
0000000C 6 .PSECT CODE,NOWRT,EXE,5
00000000 7 .ENTRY GO,0
00000002 8 ADDL3 A,B,C
00000012 9 RET
00000013 10 .END GO
.PSECT DATA, 5, NOPIC, CON, REL, LCL, NOSHR, NOEXE, RD, WRT
00000001 0000 .LONG X^1 ; .LONG 1
00000002 0004 .LONG X^2 ; .LONG 2
00000000 0008 .LONG X^0 ; .LONG 0
.PSECT CODE, 5, NOPIC, CON, REL, LCL, NOSHR, EXE, RD, NOWRT
0000 GO::
23DEFFE0 0000 LDA SP, -32(SP)
A61B0020 0004 LDQ R16, 32(R27) ; 000008
B77E0000 0008 STQ R27, (SP) ; 000007
B75E0010 000C STQ R26, 16(SP)
B7BE0018 0010 STQ FP, 24(SP)
47FE041D 0014 MOV SP, FP
0018 $L1:
A3900000 0018 LDL R28, (R16) ; 000008
A3500004 001C LDL R26, 4(R16)
439A0019 0020 ADDL R28, R26, R25
B3300008 0024 STL R25, 8(R16)
0028 $L2: ; 000009
47FD041E 0028 MOV FP, SP
A79D0010 002C LDQ R28, 16(FP)
A7BD0018 0030 LDQ FP, 24(FP)
23DE0020 0034 LDA SP, 32(SP)
6BFC8001 0038 RET R28
=== MACRO === MACRO === MACRO === MACRO === MACRO === MACRO === MACRO === MACRO ===MACRO === MACRO === MACRO ===MACRO === MACRO ===
= C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C =
1 int a = 111;
2 int b = 222;
3 int c = 0;
4
5 main()
6 {
7 c = a + b;
8 return;
9 }
.PSECT $CODE$, OCTA, PIC, CON, REL, LCL, SHR,-
EXE, NORD, NOWRT
0000 __MAIN::
23DEFFC0 0000 LDA SP, -64(SP) ; SP, -64(SP)
47E13419 0004 MOV 9, R25 ; 9, R25
B77E0000 0008 STQ R27, (SP) ; R27, (SP)
B75E0020 000C STQ R26, 32(SP) ; R26, 32(SP)
B45E0028 0010 STQ R2, 40(SP) ; R2, 40(SP)
B7BE0030 0014 STQ FP, 48(SP) ; FP, 48(SP)
47FE041D 0018 MOV SP, FP ; SP, FP
47FB0402 001C MOV R27, R2 ; R27, R2
23DEFFE0 0020 LDA SP, -32(SP) ; SP, -32(SP)
A7420038 0024 LDQ R26, 56(R2) ; R26, 56(R2)
201D0018 0028 LDA R0, argc ; R0, 24(FP)
B41E0000 002C STQ R0, (SP) ; R0, (SP)
203D0010 0030 LDA R1, argv ; R1, 16(FP)
B43E0008 0034 STQ R1, 8(SP) ; R1, 8(SP)
22DD0008 0038 LDA R22, envp ; R22, 8(FP)
A7620040 003C LDQ R27, 64(R2) ; R27, 64(R2)
B6DE0010 0040 STQ R22, 16(SP) ; R22, 16(SP)
6B5A4000 0044 JSR R26, DECC$MAIN ; R26, R26
2362FFD8 0048 LDA R27, -40(R2) ; R27, -40(R2)
D340000C 004C BSR R26, MAIN ; R26, MAIN
A7420028 0050 LDQ R26, 40(R2) ; R26, 40(R2)
47E00410 0054 MOV R0, R16 ; R0, R16
A7620030 0058 LDQ R27, 48(R2) ; R27, 48(R2)
47E03419 005C MOV 1, R25 ; 1, R25
6B5A4000 0060 JSR R26, DECC$EXIT ; R26, R26
47FD041E 0064 MOV FP, SP ; FP, SP
A75D0020 0068 LDQ R26, 32(FP) ; R26, 32(FP)
A45D0028 006C LDQ R2, 40(FP) ; R2, 40(FP)
A7BD0030 0070 LDQ FP, 48(FP) ; FP, 48(FP)
23DE0040 0074 LDA SP, 64(SP) ; SP, 64(SP)
6BFA8001 0078 RET R26 ; R26
47FF041F 007C NOP ;
0080 MAIN:: ; 000005
A41B0010 0080 LDQ R0, 16(R27) ; R0, 16(R27) ; 000007
A43B0018 0084 LDQ R1, 24(R27) ; R1, 24(R27)
A61B0020 0088 LDQ R16, 32(R27) ; R16, 32(R27)
A0000000 008C LDL R0, A ; R0, (R0)
A0210000 0090 LDL R1, B ; R1, (R1)
40010000 0094 ADDL R0, R1, R0 ; R0, R1, R0
B0100000 0098 STL R0, C ; R0, (R16)
47E03400 009C MOV 1, R0 ; 1, R0 ; 000008
6BFA8001 00A0 RET R26 ; R26
.PSECT A, OCTA, NOPIC, OVR, REL, GBL, NOSHR,-
NOEXE, RD, WRT
0000 A::
0000006F 0000 .LONG 111
.PSECT B, OCTA, NOPIC, OVR, REL, GBL, NOSHR,-
NOEXE, RD, WRT
0000 B::
000000DE 0000 .LONG 222
.PSECT C, OCTA, NOPIC, OVR, REL, GBL, NOSHR,-
NOEXE, RD, WRT
0000 C::
00000000 0000 .LONG 0
= C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C === C =
--
VAXman- A Bored Certified VMS Kernel Mode Hacker VAXman(at)TMESIS(dot)ORG
I speak to machines with the voice of humanity.
More information about the Info-vax
mailing list