[Info-vax] Hard links on VMS ODS5 disks
Arne Vajhøj
arne at vajhoej.dk
Tue Jul 25 20:53:52 EDT 2023
On 7/25/2023 8:52 PM, Arne Vajhøj wrote:
> On 7/24/2023 4:38 AM, hb at end.of.inter.net wrote:
>> On Monday, July 24, 2023 at 1:31:46 AM UTC+2, Arne Vajhøj wrote:
>>> But difficult to check the difference between /OPT and /NOOPT,
>>> because for some unknown reason /LIST/MACH does not list the
>>> generated code.
>>
>> MACRO-32 on x86?
>
> Yes.
>
>> You can always (except you compile with /NOOBJECT :-) get the machine
>> code listing with ANALYZE/OBJECT/DISASSEMBLE.
>
> I did not know that.
>
> But also weird.
>
> I do not see a difference between /OPT and /NOOPT at all.
Tested with a trivial piece of code:
.title str
.psect $CODE quad,pic,con,lcl,shr,exe,nowrt
.entry str_int_val,^m<r2,r3,r4>
movl B^4(ap),r0
movl B^4(r0),r1 ; address of string
movzwl (r0),r2 ; length of string
movl #0,r0 ; value=0
tstl r2 ; test if empty string
bleq 400$
clrl r3
movl #1,r4 ; scale=1
100$: movb (r1),r3
cmpb #32,r3 ; test if " " => skip
beql 300$
cmpb #45,r3 ; test if "-" => scale=-1*scale
bneq 200$
mull2 #-1,r4
brb 300$
200$: subb2 #48,r3 ; value=10*value+digit
mull2 #10,r0
addl2 r3,r0
300$: incl r1
decl r2
tstl r2
bgtr 100$
mull2 r4,r0 ; value=value*scale
400$: movl r0, at B^8(ap)
ret
.end
with /NOOPT:
.section
$CODE, "ax", "progbits" # EXE,SHR
.align 16
.cfi_startproc
STR_INT_VAL::
55 00000000: pushq %rbp
# 000003
E5 89 48 00000001: movq %rsp,%rbp
53 00000004: pushq %rbx
57 41 00000005: pushq %r15
56 41 00000007: pushq %r14
55 41 00000009: pushq %r13
DC B6 0F 0000000B: movzbl %ah,%ebx
00 00 00 00 E8 0000000E: callq
LIB$ALPHA_REG_VECTOR_BASE at PLT
93 48 00000013: xchgq %rax,%rbx
54 41 00000015: pushq %r12
00 00 00 80 BB 89 48 00000017: movq %rdi,00000080(%rbx)
00 00 00 88 B3 89 48 0000001E: movq %rsi,00000088(%rbx)
20 73 FF 00000025: pushq 20(%rbx)
18 73 FF 00000028: pushq 18(%rbx)
10 73 FF 0000002B: pushq 10(%rbx)
00 6A 0000002E: pushq $00
E4 89 49 00000030: movq %rsp,%r12
_$$L1:
00 00 00 80 93 63 4C 00000033: movslq
00000080(%rbx),%r10 # 000004
13 89 4C 0000003A: movq %r10,(%rbx)
13 8B 4C 0000003D: movq (%rbx),%r10
# 000005
04 5A 63 4D 00000040: movslq 04(%r10),%r11
08 5B 89 4C 00000044: movq %r11,08(%rbx)
13 8B 4C 00000048: movq (%rbx),%r10
# 000006
1A B7 0F 4D 0000004B: movzwq (%r10),%r11
10 5B 89 4C 0000004F: movq %r11,10(%rbx)
00 00 00 00 03 C7 48 00000053: movq
$00000000,(%rbx) # 000007
10 53 63 4C 0000005A: movslq 10(%rbx),%r10
# 000008
00 FA 83 41 0000005E: cmpl $00,%r10d
9F 00000062: lahf
C7 89 41 66 00000063: movw %ax,%r15w
F8 89 44 66 00000067: movw %r15w,%ax
# 000009
FF FE E0 81 66 0000006B: andw $-0002,%ax
9E 00000070: sahf
00 00 00 BC 8E 0F 00000071: jle 3_400$
C0 31 48 00000077: xorq %rax,%rax
# 000010
18 43 89 48 0000007A: movq %rax,18(%rbx)
00 00 00 01 20 43 C7 48 0000007E: movq
$00000001,20(%rbx) # 000011
3_100$:
08 53 8B 4C 00000086: movq 08(%rbx),%r10
# 000012
1A B6 0F 4D 0000008A: movzbq (%r10),%r11
18 5B 88 44 0000008E: movb %r11l,18(%rbx)
18 53 B6 0F 4C 00000092: movzbq 18(%rbx),%r10
# 000013
00 20 BB 41 66 00000097: movw $0020,%r11w
D2 BE 0F 4D 0000009C: movsbq %r10l,%r10
D3 39 45 66 000000A0: cmpw %r10w,%r11w
9F 000000A4: lahf
C7 89 41 66 000000A5: movw %ax,%r15w
F8 89 44 66 000000A9: movw %r15w,%ax
# 000014
9E 000000AD: sahf
00 00 00 4A 84 0F 000000AE: je 3_300$
18 53 B6 0F 4C 000000B4: movzbq 18(%rbx),%r10
# 000015
00 2D BB 41 66 000000B9: movw $002D,%r11w
D2 BE 0F 4D 000000BE: movsbq %r10l,%r10
D3 39 45 66 000000C2: cmpw %r10w,%r11w
9F 000000C6: lahf
C7 89 41 66 000000C7: movw %ax,%r15w
F8 89 44 66 000000CB: movw %r15w,%ax
# 000016
9E 000000CF: sahf
00 00 00 0A 85 0F 000000D0: jne 3_200$
00 00 00 8B E9 000000D6: jmpq _$$L3
# 000016
00 00 00 86 E9 000000DB: jmpq _$$L3
3_200$:
30 18 6B 80 000000E0: subb $30,18(%rbx)
# 000019
0A 13 6B 44 000000E4: imul
$0A,(%rbx),%r10d # 000020
DA 63 4D 000000E8: movslq %r10d,%r11
1B 89 4C 000000EB: movq %r11,(%rbx)
18 53 63 4C 000000EE: movslq 18(%rbx),%r10
# 000021
1B 8B 4C 000000F2: movq (%rbx),%r11
D3 01 45 000000F5: addl %r10d,%r11d
CB 63 4D 000000F8: movslq %r11d,%r9
0B 89 4C 000000FB: movq %r9,(%rbx)
3_300$:
01 08 43 83 48 000000FE: addq $01,08(%rbx)
# 000022
01 10 6B 83 48 00000103: subq $01,10(%rbx)
# 000023
10 53 63 4C 00000108: movslq 10(%rbx),%r10
# 000024
00 FA 83 41 0000010C: cmpl $00,%r10d
9F 00000110: lahf
C7 89 41 66 00000111: movw %ax,%r15w
F8 89 44 66 00000115: movw %r15w,%ax
# 000025
FF FE E0 81 66 00000119: andw $-0002,%ax
9E 0000011E: sahf
FF FF FF 61 8F 0F 0000011F: jg 3_100$
20 53 63 4C 00000125: movslq 20(%rbx),%r10
# 000026
13 AF 0F 44 00000129: imull (%rbx),%r10d
DA 63 4D 0000012D: movslq %r10d,%r11
1B 89 4C 00000130: movq %r11,(%rbx)
3_400$:
13 63 4C 00000133: movslq (%rbx),%r10
# 000027
00 00 00 88 9B 8B 4C 00000136: movq 00000088(%rbx),%r11
13 89 45 0000013D: movl %r10d,(%r11)
_$$_0:
C0 65 8D 48 00000140: leaq -40(%rbp),%rsp
# 000028
FE 00 00 00 F0 A3 80 00000144: andb $-02,000000F0(%rbx)
10 43 8F 0000014B: popq 10(%rbx)
18 43 8F 0000014E: popq 18(%rbx)
20 43 8F 00000151: popq 20(%rbx)
03 8B 48 00000154: movq (%rbx),%rax
08 53 8B 48 00000157: movq 08(%rbx),%rdx
5C 41 0000015B: popq %r12
5D 41 0000015D: popq %r13
5E 41 0000015F: popq %r14
5F 41 00000161: popq %r15
5B 00000163: popq %rbx
5D 00000164: popq %rbp
C3 00000165: retq
_$$L3:
FF 20 53 6B 44 00000166: imul
$-01,20(%rbx),%r10d # 000017
DA 63 4D 0000016B: movslq %r10d,%r11
20 5B 89 4C 0000016E: movq %r11,20(%rbx)
FF FF FF 87 E9 00000172: jmpq 3_300$
# 000018
.cfi_endproc
with /OPT:
.cfi_startproc
STR_INT_VAL::
55 00000000: pushq %rbp
# 000003
E5 89 48 00000001: movq %rsp,%rbp
53 00000004: pushq %rbx
57 41 00000005: pushq %r15
56 41 00000007: pushq %r14
55 41 00000009: pushq %r13
DC B6 0F 0000000B: movzbl %ah,%ebx
00 00 00 00 E8 0000000E: callq
LIB$ALPHA_REG_VECTOR_BASE at PLT
93 48 00000013: xchgq %rax,%rbx
54 41 00000015: pushq %r12
00 00 00 80 BB 89 48 00000017: movq %rdi,00000080(%rbx)
00 00 00 88 B3 89 48 0000001E: movq %rsi,00000088(%rbx)
20 73 FF 00000025: pushq 20(%rbx)
18 73 FF 00000028: pushq 18(%rbx)
10 73 FF 0000002B: pushq 10(%rbx)
00 6A 0000002E: pushq $00
E4 89 49 00000030: movq %rsp,%r12
_$$L1:
00 00 00 80 93 63 4C 00000033: movslq
00000080(%rbx),%r10 # 000004
13 89 4C 0000003A: movq %r10,(%rbx)
13 8B 4C 0000003D: movq (%rbx),%r10
# 000005
04 5A 63 4D 00000040: movslq 04(%r10),%r11
08 5B 89 4C 00000044: movq %r11,08(%rbx)
13 8B 4C 00000048: movq (%rbx),%r10
# 000006
1A B7 0F 4D 0000004B: movzwq (%r10),%r11
10 5B 89 4C 0000004F: movq %r11,10(%rbx)
00 00 00 00 03 C7 48 00000053: movq
$00000000,(%rbx) # 000007
10 53 63 4C 0000005A: movslq 10(%rbx),%r10
# 000008
00 FA 83 41 0000005E: cmpl $00,%r10d
9F 00000062: lahf
C7 89 41 66 00000063: movw %ax,%r15w
F8 89 44 66 00000067: movw %r15w,%ax
# 000009
FF FE E0 81 66 0000006B: andw $-0002,%ax
9E 00000070: sahf
00 00 00 BC 8E 0F 00000071: jle 3_400$
C0 31 48 00000077: xorq %rax,%rax
# 000010
18 43 89 48 0000007A: movq %rax,18(%rbx)
00 00 00 01 20 43 C7 48 0000007E: movq
$00000001,20(%rbx) # 000011
3_100$:
08 53 8B 4C 00000086: movq 08(%rbx),%r10
# 000012
1A B6 0F 4D 0000008A: movzbq (%r10),%r11
18 5B 88 44 0000008E: movb %r11l,18(%rbx)
18 53 B6 0F 4C 00000092: movzbq 18(%rbx),%r10
# 000013
00 20 BB 41 66 00000097: movw $0020,%r11w
D2 BE 0F 4D 0000009C: movsbq %r10l,%r10
D3 39 45 66 000000A0: cmpw %r10w,%r11w
9F 000000A4: lahf
C7 89 41 66 000000A5: movw %ax,%r15w
F8 89 44 66 000000A9: movw %r15w,%ax
# 000014
9E 000000AD: sahf
00 00 00 4A 84 0F 000000AE: je 3_300$
18 53 B6 0F 4C 000000B4: movzbq 18(%rbx),%r10
# 000015
00 2D BB 41 66 000000B9: movw $002D,%r11w
D2 BE 0F 4D 000000BE: movsbq %r10l,%r10
D3 39 45 66 000000C2: cmpw %r10w,%r11w
9F 000000C6: lahf
C7 89 41 66 000000C7: movw %ax,%r15w
F8 89 44 66 000000CB: movw %r15w,%ax
# 000016
9E 000000CF: sahf
00 00 00 0A 85 0F 000000D0: jne 3_200$
00 00 00 8B E9 000000D6: jmpq _$$L3
# 000016
00 00 00 86 E9 000000DB: jmpq _$$L3
3_200$:
30 18 6B 80 000000E0: subb $30,18(%rbx)
# 000019
0A 13 6B 44 000000E4: imul
$0A,(%rbx),%r10d # 000020
DA 63 4D 000000E8: movslq %r10d,%r11
1B 89 4C 000000EB: movq %r11,(%rbx)
18 53 63 4C 000000EE: movslq 18(%rbx),%r10
# 000021
1B 8B 4C 000000F2: movq (%rbx),%r11
D3 01 45 000000F5: addl %r10d,%r11d
CB 63 4D 000000F8: movslq %r11d,%r9
0B 89 4C 000000FB: movq %r9,(%rbx)
3_300$:
01 08 43 83 48 000000FE: addq $01,08(%rbx)
# 000022
01 10 6B 83 48 00000103: subq $01,10(%rbx)
# 000023
10 53 63 4C 00000108: movslq 10(%rbx),%r10
# 000024
00 FA 83 41 0000010C: cmpl $00,%r10d
9F 00000110: lahf
C7 89 41 66 00000111: movw %ax,%r15w
F8 89 44 66 00000115: movw %r15w,%ax
# 000025
FF FE E0 81 66 00000119: andw $-0002,%ax
9E 0000011E: sahf
FF FF FF 61 8F 0F 0000011F: jg 3_100$
20 53 63 4C 00000125: movslq 20(%rbx),%r10
# 000026
13 AF 0F 44 00000129: imull (%rbx),%r10d
DA 63 4D 0000012D: movslq %r10d,%r11
1B 89 4C 00000130: movq %r11,(%rbx)
3_400$:
13 63 4C 00000133: movslq (%rbx),%r10
# 000027
00 00 00 88 9B 8B 4C 00000136: movq 00000088(%rbx),%r11
13 89 45 0000013D: movl %r10d,(%r11)
_$$_0:
C0 65 8D 48 00000140: leaq -40(%rbp),%rsp
# 000028
FE 00 00 00 F0 A3 80 00000144: andb $-02,000000F0(%rbx)
10 43 8F 0000014B: popq 10(%rbx)
18 43 8F 0000014E: popq 18(%rbx)
20 43 8F 00000151: popq 20(%rbx)
03 8B 48 00000154: movq (%rbx),%rax
08 53 8B 48 00000157: movq 08(%rbx),%rdx
5C 41 0000015B: popq %r12
5D 41 0000015D: popq %r13
5E 41 0000015F: popq %r14
5F 41 00000161: popq %r15
5B 00000163: popq %rbx
5D 00000164: popq %rbp
C3 00000165: retq
_$$L3:
FF 20 53 6B 44 00000166: imul
$-01,20(%rbx),%r10d # 000017
DA 63 4D 0000016B: movslq %r10d,%r11
20 5B 89 4C 0000016E: movq %r11,20(%rbx)
FF FF FF 87 E9 00000172: jmpq 3_300$
# 000018
.cfi_endproc
Arne
More information about the Info-vax
mailing list