797
797
.global GET
798
798
.type GET, %function
799
799
GET:
800
+ /* Store GP registers */
800
801
stp X1, X2, [X0,#8]
801
802
stp X3, X4, [X0,#24]
802
803
stp X5, X6, [X0,#40]
@@ -811,12 +812,34 @@ GET:
811
812
stp X23, X24, [X0,#184]
812
813
stp X25, X26, [X0,#200]
813
814
stp X27, X28, [X0,#216]
814
- stp X29, X30, [X0,#232] (/* X30 is LR) */)
815
- str SP, [X0,#248] _(/* sp */)
816
- _(/*) store 1 as X0-to-restore */ )
815
+ stp X29, X30, [X0,#232] /* X30 is LR */
816
+ str SP, [X0,#248] /* sp */
817
+
818
+ /* Store vector registers */
819
+ add X0, X0, #256 /* Update pointer to avoid immediate growing to large for STP/LDP instruction */
820
+ stp Q0, Q1, [X0]
821
+ stp Q2, Q3, [X0,#32]
822
+ stp Q4, Q5, [X0,#64]
823
+ stp Q6, Q7, [X0,#96]
824
+ stp Q8, Q9, [X0,#128]
825
+ stp Q10, Q11, [X0,#160]
826
+ stp Q12, Q13, [X0,#192]
827
+ stp Q14, Q15, [X0,#224]
828
+ stp Q16, Q17, [X0,#256]
829
+ stp Q18, Q19, [X0,#288]
830
+ stp Q20, Q21, [X0,#320]
831
+ stp Q22, Q23, [X0,#352]
832
+ stp Q24, Q25, [X0,#384]
833
+ stp Q26, Q27, [X0,#416]
834
+ stp Q28, Q29, [X0,#448]
835
+ stp Q30, Q31, [X0,#480]
836
+ sub X0, X0, #256
837
+
838
+ /* Store 1 as X0-to-restore */
817
839
mov X1, #1
818
- str X1, [X0] _(/* arg 1 / RET 1 */ )
819
- _(/*) return 0 */ )
840
+ str X1, [X0]
841
+
842
+ /* return 0 */
820
843
mov X0, #0
821
844
ret
822
845
/*
828
851
.global SET
829
852
.type SET, %function
830
853
SET:
854
+ /* Load GP registers */
831
855
ldp X1, X2, [X0,#8]
832
856
ldp X3, X4, [X0,#24]
833
857
ldp X5, X6, [X0,#40]
@@ -842,17 +866,34 @@ SET:
842
866
ldp X23, X24, [X0,#184]
843
867
ldp X25, X26, [X0,#200]
844
868
ldp X27, X28, [X0,#216]
845
- ldp X29, X30, [X0,#232] (/* X30 is LR) */)
846
- ldr SP, [X0,#248] _(/* sp */)
869
+ ldp X29, X30, [X0,#232]
870
+ ldr SP, [X0,#248]
871
+
872
+
873
+ /* Load vector registers */
874
+ add X0, X0, #256
875
+ ldp Q0, Q1, [X0]
876
+ ldp Q2, Q3, [X0,#32]
877
+ ldp Q4, Q5, [X0,#64]
878
+ ldp Q6, Q7, [X0,#96]
879
+ ldp Q8, Q9, [X0,#128]
880
+ ldp Q10, Q11, [X0,#160]
881
+ ldp Q12, Q13, [X0,#192]
882
+ ldp Q14, Q15, [X0,#224]
883
+ ldp Q16, Q17, [X0,#256]
884
+ ldp Q18, Q19, [X0,#288]
885
+ ldp Q20, Q21, [X0,#320]
886
+ ldp Q22, Q23, [X0,#352]
887
+ ldp Q24, Q25, [X0,#384]
888
+ ldp Q26, Q27, [X0,#416]
889
+ ldp Q28, Q29, [X0,#448]
890
+ ldp Q30, Q31, [X0,#480]
891
+ sub X0, X0, #256
892
+
847
893
ldr X0, [X0]
848
894
ret
849
895
#endif
850
896
851
- #if defined(__ELF__) && !defined(__SUNPRO_C)
852
- .section .note.GNU-stack,"",%progbits
853
- #endif
854
-
855
-
856
897
#ifdef NEEDARMCONTEXT
857
898
#warning NEEDARMCONTEXT
858
899
#warning GET SET
898
939
str r1, [r0] _(/* arg 1 / RET 1 */ )
899
940
_(/*) return 0 */ )
900
941
mov r0, #0
901
- bx lr
942
+ bx lr
902
943
903
944
.globl SET
904
945
.global SET
919
960
ldr r13, [r0,#52]
920
961
ldr r14, [r0,#56]
921
962
ldr r0, [r0]
922
- bx lr
963
+ bx lr
923
964
#endif
924
965
925
966
#if defined(__ELF__) && !defined(__SUNPRO_C)
0 commit comments