@@ -86,28 +86,29 @@ internal let _countGPRegisters = 16
86
86
@_versioned
87
87
internal let _registerSaveWords = _countGPRegisters
88
88
89
- #elseif arch(arm64)
89
+ #elseif arch(arm64) && !(os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || os(Windows))
90
90
91
- // ARM IHI 0055B
92
- // va_list may refer to any paramenter may be in one of three memory locations:
91
+ // ARM Procedure Call Standard for aarch64. (IHI0055B)
92
+ // The va_list type may refer to any parameter in a parameter list may be in one
93
+ // of three memory locations depending on its type and position in the argument
94
+ // list :
93
95
// 1. GP register save area x0 - x7
94
96
// 2. FP/SIMD register save area q0 - q7
95
97
// 3. Stack argument area
96
- //
97
98
98
99
@_versioned
99
100
internal let _countGPRegisters = 8
100
101
101
102
@_versioned
102
103
internal let _countFPRegisters = 8
103
104
104
- //128bit, 2 64bit word
105
105
@_versioned
106
- internal let _fpRegisterWords = 2
106
+ internal let _fpRegisterWords =
107
+ MemoryLayout < Double > . size / MemoryLayout < Int > . size
107
108
108
109
@_versioned
109
- internal let _registerSaveWords = _countGPRegisters + ( _countFPRegisters * _fpRegisterWords )
110
-
110
+ internal let _registerSaveWords =
111
+ _countGPRegisters + ( _countFPRegisters * _fpRegisterWords )
111
112
112
113
#endif
113
114
@@ -491,20 +492,18 @@ final internal class _VaListBuilder {
491
492
internal var storage : ContiguousArray < Int >
492
493
}
493
494
494
- #elseif arch(arm64) && !(os(macOS) || os(iOS) || os(tvOS) || os(watchOS))
495
-
495
+ #elseif arch(arm64) && !(os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || os(Windows))
496
496
497
497
@_fixed_layout // FIXME(sil-serialize-all)
498
498
@_versioned // FIXME(sil-serialize-all)
499
499
final internal class _VaListBuilder {
500
-
501
500
@_inlineable // FIXME(sil-serialize-all)
502
501
@_versioned // FIXME(sil-serialize-all)
503
502
internal init ( ) {
504
- // prepare the register save area
503
+ // Prepare the register save area.
505
504
allocated = _registerSaveWords
506
505
storage = allocStorage ( wordCount: allocated)
507
- // append stack arguments after register save area
506
+ // Append stack arguments after register save area.
508
507
count = allocated
509
508
}
510
509
@@ -523,21 +522,21 @@ final internal class _VaListBuilder {
523
522
524
523
if arg is _CVarArgPassedAsDouble
525
524
&& fpRegistersUsed < _countFPRegisters {
526
- var startIndex = ( fpRegistersUsed * _fpRegisterWords)
527
- for w in encoded {
528
- storage [ startIndex] = w
529
- startIndex += 1
530
- }
531
- fpRegistersUsed += 1
532
- } else if encoded. count == 1
533
- && !( arg is _CVarArgPassedAsDouble )
534
- && gpRegistersUsed < _countGPRegisters {
535
- var startIndex = ( _fpRegisterWords * _countFPRegisters) + gpRegistersUsed
536
- storage [ startIndex] = encoded [ 0 ]
537
- gpRegistersUsed += 1
538
- } else {
539
- //arguments in stack slot
540
- appendWords ( encoded)
525
+ var startIndex = ( fpRegistersUsed * _fpRegisterWords)
526
+ for w in encoded {
527
+ storage [ startIndex] = w
528
+ startIndex += 1
529
+ }
530
+ fpRegistersUsed += 1
531
+ } else if encoded. count == 1
532
+ && !( arg is _CVarArgPassedAsDouble )
533
+ && gpRegistersUsed < _countGPRegisters {
534
+ var startIndex = ( _fpRegisterWords * _countFPRegisters) + gpRegistersUsed
535
+ storage [ startIndex] = encoded [ 0 ]
536
+ gpRegistersUsed += 1
537
+ } else {
538
+ // Arguments in stack slot.
539
+ appendWords ( encoded)
541
540
}
542
541
}
543
542
@@ -563,7 +562,7 @@ final internal class _VaListBuilder {
563
562
allocated = max ( newCount, allocated * 2 )
564
563
let newStorage = allocStorage ( wordCount: allocated)
565
564
storage = newStorage
566
- // count is updated below
565
+ // Count is updated below.
567
566
568
567
if let allocatedOldStorage = oldStorage {
569
568
newStorage. moveInitialize ( from: allocatedOldStorage, count: oldCount)
0 commit comments