2020-12-01 Niels Möller <nisse@lysator.liu.se>
- * powerpc64/p7/chacha-4core.asm (QR): Instruction level
- interleaving in the main loop, written by Torbjörn Granlund.
+ * powerpc64/p7/chacha-4core.asm: Use protected zone below stack
+ pointer to save registers, without modifying the stack pointer.
+ (QR): Instruction level interleaving in the main loop, written by
+ Torbjörn Granlund.
2020-11-30 Niels Möller <nisse@lysator.liu.se>
li r7, 0x20 C ...useful...
li r8, 0x30 C ...offsets
- addi SP, SP, -0x40 C Save callee-save registers
- stvx v20, 0, SP
- stvx v21, r6, SP
- stvx v22, r7, SP
- stvx v23, r8, SP
+ C Save callee-save registers. Use the "protected zone", max
+ C 228 bytes, below the stack pointer, accessed via r10.
+ addi r10, SP, -0x40
+ stvx v20, 0, r10
+ stvx v21, r6, r10
+ stvx v22, r7, r10
+ stvx v23, r8, r10
vspltisw ROT16, -16 C -16 instead of 16 actually works!
vspltisw ROT12, 12
stxvw4x VSR(v15), r8, DST
C Restore callee-save registers
- lvx v20, 0, SP
- lvx v21, r6, SP
- lvx v22, r7, SP
- lvx v23, r8, SP
- addi SP, SP, 0x40
+ lvx v20, 0, r10
+ lvx v21, r6, r10
+ lvx v22, r7, r10
+ lvx v23, r8, r10
blr
EPILOGUE(_nettle_chacha_4core)