Source/Packages

Platform.AArch64.CyclicRecordOffset

packages/hardware/platforms/dgx-spark/src/Platform/AArch64/CyclicRecordOffset.alpha

49 lines2 declarations5.7 KiBSHA-256 38574a7a4c3c

Complete file

CyclicRecordOffset.alpha

Definition view
1module Platform.AArch64.CyclicRecordOffset
2
3import Compiler.MachineAArch64
4import Compiler.MachineAArch64Assembly
5import Runtime.CyclicRecordOffset
6
7-- AAPCS64 twin: x0..x5 are the six arguments of the shared contract.
8-- x6 and x7 are temporaries; interpreter and callee-saved registers survive.
9-- No division is reached with a zero divisor. Rejection leaves output intact.
10def aarch64CyclicRecordOffsetAssembly : (family AArch64Assembly) =
11  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64CompareImmediate (constructor AArch64Register AArch64X3) 0)
12  (constructor AArch64Assembly AArch64AssemblyBranchIf (constructor AArch64Condition AArch64Equal) b"reject"
13  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64CompareImmediate (constructor AArch64Register AArch64X4) 0)
14  (constructor AArch64Assembly AArch64AssemblyBranchIf (constructor AArch64Condition AArch64Equal) b"reject"
15  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64CompareRegister (constructor AArch64Register AArch64X5) (constructor AArch64Register AArch64X4))
16  (constructor AArch64Assembly AArch64AssemblyBranchIf (constructor AArch64Condition AArch64CarryClear) b"inside"
17  (constructor AArch64Assembly AArch64AssemblyBranch b"reject"
18  (constructor AArch64Assembly AArch64AssemblyLabel b"inside"
19  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64AddRegister (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X1) (constructor AArch64Register AArch64X2))
20  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64CompareRegister (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X1))
21  (constructor AArch64Assembly AArch64AssemblyBranchIf (constructor AArch64Condition AArch64CarryClear) b"reject"
22  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MoveWideZero (constructor AArch64Register AArch64X7) 65535 (constructor AArch64HalfwordShift AArch64Shift0))
23  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MoveWideKeep (constructor AArch64Register AArch64X7) 65535 (constructor AArch64HalfwordShift AArch64Shift16))
24  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MoveWideKeep (constructor AArch64Register AArch64X7) 65535 (constructor AArch64HalfwordShift AArch64Shift32))
25  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MoveWideKeep (constructor AArch64Register AArch64X7) 32767 (constructor AArch64HalfwordShift AArch64Shift48))
26  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64DivideRegisterUnsigned (constructor AArch64Register AArch64X7) (constructor AArch64Register AArch64X7) (constructor AArch64Register AArch64X4))
27  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64CompareRegister (constructor AArch64Register AArch64X3) (constructor AArch64Register AArch64X7))
28  (constructor AArch64Assembly AArch64AssemblyBranchIf (constructor AArch64Condition AArch64UnsignedHigher) b"reject"
29  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64DivideRegisterUnsigned (constructor AArch64Register AArch64X7) (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X3))
30  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MultiplyRegister (constructor AArch64Register AArch64X7) (constructor AArch64Register AArch64X7) (constructor AArch64Register AArch64X3))
31  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64SubtractRegister (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X7))
32  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MultiplyRegister (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X4))
33  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64AddRegister (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X6) (constructor AArch64Register AArch64X5))
34  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64StoreMemory64 (constructor AArch64Register AArch64X0) 0 (constructor AArch64Register AArch64X6))
35  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MoveWideZero (constructor AArch64Register AArch64X0) 0 (constructor AArch64HalfwordShift AArch64Shift0))
36  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64Return )
37  (constructor AArch64Assembly AArch64AssemblyLabel b"reject"
38  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64MoveWideZero (constructor AArch64Register AArch64X0) 1 (constructor AArch64HalfwordShift AArch64Shift0))
39  (constructor AArch64Assembly AArch64AssemblyEmit (constructor AArch64Instruction AArch64Return )
40    (constructor AArch64Assembly AArch64AssemblyEnd))))))))))))))))))))))))))))))
41
42def aarch64CyclicRecordOffsetRoutine : Bytes =
43  (eliminate AArch64AssemblyResult (lambda unrestricted current : (family AArch64AssemblyResult) . Bytes)
44    (aarch64Assemble aarch64CyclicRecordOffsetAssembly)
45    (branch AArch64AssemblyEncoded code . code)
46    (branch AArch64AssemblyEncodeDuplicateLabel name . b"")
47    (branch AArch64AssemblyMissingLabel name . b"")
48    (branch AArch64AssemblyDisplacementOutOfRange name . b"")
49    (branch AArch64AssemblyOperandRefused value . b""))

The compiler supplied declaration spans and resolved links from this source snapshot. This page does not assert that this file belongs to a checked closure.