[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