1 /* libgcc routines for NEC V850.
2 Copyright (C) 1996, 1997, 2002, 2005, 2009, 2010, 2013
3 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
12 This file is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 Under Section 7 of GPL version 3, you are granted additional
18 permissions described in the GCC Runtime Library Exception, version
19 3.1, as published by the Free Software Foundation.
21 You should have received a copy of the GNU General Public License and
22 a copy of the GCC Runtime Library Exception along with this program;
23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24 <http://www.gnu.org/licenses/>. */
29 .type ___mulsi3,@function
34 #define MASK ((1 << SHIFT) - 1)
38 short a_part = (a >> (i)) & MASK; \
39 short b_part = (b >> (j)) & MASK; \
40 int res = (((int) a_part) * ((int) b_part)); \
45 __mulsi3 (unsigned a, unsigned b)
48 ((STEP (SHIFT, 0) + STEP (0, SHIFT)) << SHIFT) +
49 ((STEP (0, 2 * SHIFT) + STEP (SHIFT, SHIFT) + STEP (2 * SHIFT, 0))
54 movea lo(32767), r0, r10
84 #if defined(__v850e__) || defined(__v850ea__) || defined(__v850e2__) || defined(__v850e2v3__)
85 /* This routine is almost unneccesarry because gcc
86 generates the MUL instruction for the RTX mulsi3.
87 But if someone wants to link his application with
88 previsously compiled v850 objects then they will
89 need this function. */
91 /* It isn't good to put the inst sequence as below;
94 In this case, there is a RAW hazard between them.
95 MUL inst takes 2 cycle in EX stage, then MOV inst
100 #endif /* __v850e__ */
101 .size ___mulsi3,.-___mulsi3
102 #endif /* L_mulsi3 */
108 .type ___udivsi3,@function
115 movhi hi(-2147483648),r0,r13
143 #else /* defined(__v850e__) */
145 /* See comments at end of __mulsi3. */
150 #endif /* __v850e__ */
152 .size ___udivsi3,.-___udivsi3
158 .type ___divsi3,@function
185 #else /* defined(__v850e__) */
187 /* See comments at end of __mulsi3. */
192 #endif /* __v850e__ */
194 .size ___divsi3,.-___divsi3
200 .type ___umodsi3,@function
217 #else /* defined(__v850e__) */
219 /* See comments at end of __mulsi3. */
223 #endif /* __v850e__ */
225 .size ___umodsi3,.-___umodsi3
226 #endif /* L_umodsi3 */
231 .type ___modsi3,@function
248 #else /* defined(__v850e__) */
250 /* See comments at end of __mulsi3. */
254 #endif /* __v850e__ */
256 .size ___modsi3,.-___modsi3
257 #endif /* L_modsi3 */
263 .type __save_r2_r29,@function
264 /* Allocate space and save registers 2, 20 .. 29 on the stack. */
265 /* Called via: jalr __save_r2_r29,r10. */
298 .size __save_r2_r29,.-__save_r2_r29
300 /* Restore saved registers, deallocate stack and return to the user. */
301 /* Called via: jr __return_r2_r29. */
303 .globl __return_r2_r29
304 .type __return_r2_r29,@function
337 .size __return_r2_r29,.-__return_r2_r29
338 #endif /* L_save_2 */
343 .globl __save_r20_r29
344 .type __save_r20_r29,@function
345 /* Allocate space and save registers 20 .. 29 on the stack. */
346 /* Called via: jalr __save_r20_r29,r10. */
377 .size __save_r20_r29,.-__save_r20_r29
379 /* Restore saved registers, deallocate stack and return to the user. */
380 /* Called via: jr __return_r20_r29. */
382 .globl __return_r20_r29
383 .type __return_r20_r29,@function
414 .size __return_r20_r29,.-__return_r20_r29
415 #endif /* L_save_20 */
420 .globl __save_r21_r29
421 .type __save_r21_r29,@function
422 /* Allocate space and save registers 21 .. 29 on the stack. */
423 /* Called via: jalr __save_r21_r29,r10. */
452 .size __save_r21_r29,.-__save_r21_r29
454 /* Restore saved registers, deallocate stack and return to the user. */
455 /* Called via: jr __return_r21_r29. */
457 .globl __return_r21_r29
458 .type __return_r21_r29,@function
487 .size __return_r21_r29,.-__return_r21_r29
488 #endif /* L_save_21 */
493 .globl __save_r22_r29
494 .type __save_r22_r29,@function
495 /* Allocate space and save registers 22 .. 29 on the stack. */
496 /* Called via: jalr __save_r22_r29,r10. */
523 .size __save_r22_r29,.-__save_r22_r29
525 /* Restore saved registers, deallocate stack and return to the user. */
526 /* Called via: jr __return_r22_r29. */
528 .globl __return_r22_r29
529 .type __return_r22_r29,@function
556 .size __return_r22_r29,.-__return_r22_r29
557 #endif /* L_save_22 */
562 .globl __save_r23_r29
563 .type __save_r23_r29,@function
564 /* Allocate space and save registers 23 .. 29 on the stack. */
565 /* Called via: jalr __save_r23_r29,r10. */
590 .size __save_r23_r29,.-__save_r23_r29
592 /* Restore saved registers, deallocate stack and return to the user. */
593 /* Called via: jr __return_r23_r29. */
595 .globl __return_r23_r29
596 .type __return_r23_r29,@function
621 .size __return_r23_r29,.-__return_r23_r29
622 #endif /* L_save_23 */
627 .globl __save_r24_r29
628 .type __save_r24_r29,@function
629 /* Allocate space and save registers 24 .. 29 on the stack. */
630 /* Called via: jalr __save_r24_r29,r10. */
653 .size __save_r24_r29,.-__save_r24_r29
655 /* Restore saved registers, deallocate stack and return to the user. */
656 /* Called via: jr __return_r24_r29. */
658 .globl __return_r24_r29
659 .type __return_r24_r29,@function
682 .size __return_r24_r29,.-__return_r24_r29
683 #endif /* L_save_24 */
688 .globl __save_r25_r29
689 .type __save_r25_r29,@function
690 /* Allocate space and save registers 25 .. 29 on the stack. */
691 /* Called via: jalr __save_r25_r29,r10. */
712 .size __save_r25_r29,.-__save_r25_r29
714 /* Restore saved registers, deallocate stack and return to the user. */
715 /* Called via: jr __return_r25_r29. */
717 .globl __return_r25_r29
718 .type __return_r25_r29,@function
739 .size __return_r25_r29,.-__return_r25_r29
740 #endif /* L_save_25 */
745 .globl __save_r26_r29
746 .type __save_r26_r29,@function
747 /* Allocate space and save registers 26 .. 29 on the stack. */
748 /* Called via: jalr __save_r26_r29,r10. */
767 .size __save_r26_r29,.-__save_r26_r29
769 /* Restore saved registers, deallocate stack and return to the user. */
770 /* Called via: jr __return_r26_r29. */
772 .globl __return_r26_r29
773 .type __return_r26_r29,@function
792 .size __return_r26_r29,.-__return_r26_r29
793 #endif /* L_save_26 */
798 .globl __save_r27_r29
799 .type __save_r27_r29,@function
800 /* Allocate space and save registers 27 .. 29 on the stack. */
801 /* Called via: jalr __save_r27_r29,r10. */
808 .size __save_r27_r29,.-__save_r27_r29
810 /* Restore saved registers, deallocate stack and return to the user. */
811 /* Called via: jr __return_r27_r29. */
813 .globl __return_r27_r29
814 .type __return_r27_r29,@function
821 .size __return_r27_r29,.-__return_r27_r29
822 #endif /* L_save_27 */
827 .globl __save_r28_r29
828 .type __save_r28_r29,@function
829 /* Allocate space and save registers 28,29 on the stack. */
830 /* Called via: jalr __save_r28_r29,r10. */
836 .size __save_r28_r29,.-__save_r28_r29
838 /* Restore saved registers, deallocate stack and return to the user. */
839 /* Called via: jr __return_r28_r29. */
841 .globl __return_r28_r29
842 .type __return_r28_r29,@function
848 .size __return_r28_r29,.-__return_r28_r29
849 #endif /* L_save_28 */
855 .type __save_r29,@function
856 /* Allocate space and save register 29 on the stack. */
857 /* Called via: jalr __save_r29,r10. */
862 .size __save_r29,.-__save_r29
864 /* Restore saved register 29, deallocate stack and return to the user. */
865 /* Called via: jr __return_r29. */
868 .type __return_r29,@function
873 .size __return_r29,.-__return_r29
874 #endif /* L_save_28 */
880 .type __save_r2_r31,@function
881 /* Allocate space and save registers 20 .. 29, 31 on the stack. */
882 /* Also allocate space for the argument save area. */
883 /* Called via: jalr __save_r2_r31,r10. */
918 .size __save_r2_r31,.-__save_r2_r31
920 /* Restore saved registers, deallocate stack and return to the user. */
921 /* Called via: jr __return_r20_r31. */
923 .globl __return_r2_r31
924 .type __return_r2_r31,@function
959 .size __return_r2_r31,.-__return_r2_r31
960 #endif /* L_save_2c */
965 .globl __save_r20_r31
966 .type __save_r20_r31,@function
967 /* Allocate space and save registers 20 .. 29, 31 on the stack. */
968 /* Also allocate space for the argument save area. */
969 /* Called via: jalr __save_r20_r31,r10. */
1002 .size __save_r20_r31,.-__save_r20_r31
1004 /* Restore saved registers, deallocate stack and return to the user. */
1005 /* Called via: jr __return_r20_r31. */
1007 .globl __return_r20_r31
1008 .type __return_r20_r31,@function
1041 .size __return_r20_r31,.-__return_r20_r31
1042 #endif /* L_save_20c */
1047 .globl __save_r21_r31
1048 .type __save_r21_r31,@function
1049 /* Allocate space and save registers 21 .. 29, 31 on the stack. */
1050 /* Also allocate space for the argument save area. */
1051 /* Called via: jalr __save_r21_r31,r10. */
1083 .size __save_r21_r31,.-__save_r21_r31
1085 /* Restore saved registers, deallocate stack and return to the user. */
1086 /* Called via: jr __return_r21_r31. */
1088 .globl __return_r21_r31
1089 .type __return_r21_r31,@function
1120 .size __return_r21_r31,.-__return_r21_r31
1121 #endif /* L_save_21c */
1126 .globl __save_r22_r31
1127 .type __save_r22_r31,@function
1128 /* Allocate space and save registers 22 .. 29, 31 on the stack. */
1129 /* Also allocate space for the argument save area. */
1130 /* Called via: jalr __save_r22_r31,r10. */
1159 .size __save_r22_r31,.-__save_r22_r31
1161 /* Restore saved registers, deallocate stack and return to the user. */
1162 /* Called via: jr __return_r22_r31. */
1164 .globl __return_r22_r31
1165 .type __return_r22_r31,@function
1194 .size __return_r22_r31,.-__return_r22_r31
1195 #endif /* L_save_22c */
1200 .globl __save_r23_r31
1201 .type __save_r23_r31,@function
1202 /* Allocate space and save registers 23 .. 29, 31 on the stack. */
1203 /* Also allocate space for the argument save area. */
1204 /* Called via: jalr __save_r23_r31,r10. */
1231 .size __save_r23_r31,.-__save_r23_r31
1233 /* Restore saved registers, deallocate stack and return to the user. */
1234 /* Called via: jr __return_r23_r31. */
1236 .globl __return_r23_r31
1237 .type __return_r23_r31,@function
1264 .size __return_r23_r31,.-__return_r23_r31
1265 #endif /* L_save_23c */
1270 .globl __save_r24_r31
1271 .type __save_r24_r31,@function
1272 /* Allocate space and save registers 24 .. 29, 31 on the stack. */
1273 /* Also allocate space for the argument save area. */
1274 /* Called via: jalr __save_r24_r31,r10. */
1299 .size __save_r24_r31,.-__save_r24_r31
1301 /* Restore saved registers, deallocate stack and return to the user. */
1302 /* Called via: jr __return_r24_r31. */
1304 .globl __return_r24_r31
1305 .type __return_r24_r31,@function
1330 .size __return_r24_r31,.-__return_r24_r31
1331 #endif /* L_save_24c */
1336 .globl __save_r25_r31
1337 .type __save_r25_r31,@function
1338 /* Allocate space and save registers 25 .. 29, 31 on the stack. */
1339 /* Also allocate space for the argument save area. */
1340 /* Called via: jalr __save_r25_r31,r10. */
1363 .size __save_r25_r31,.-__save_r25_r31
1365 /* Restore saved registers, deallocate stack and return to the user. */
1366 /* Called via: jr __return_r25_r31. */
1368 .globl __return_r25_r31
1369 .type __return_r25_r31,@function
1392 .size __return_r25_r31,.-__return_r25_r31
1393 #endif /* L_save_25c */
1398 .globl __save_r26_r31
1399 .type __save_r26_r31,@function
1400 /* Allocate space and save registers 26 .. 29, 31 on the stack. */
1401 /* Also allocate space for the argument save area. */
1402 /* Called via: jalr __save_r26_r31,r10. */
1423 .size __save_r26_r31,.-__save_r26_r31
1425 /* Restore saved registers, deallocate stack and return to the user. */
1426 /* Called via: jr __return_r26_r31. */
1428 .globl __return_r26_r31
1429 .type __return_r26_r31,@function
1450 .size __return_r26_r31,.-__return_r26_r31
1451 #endif /* L_save_26c */
1456 .globl __save_r27_r31
1457 .type __save_r27_r31,@function
1458 /* Allocate space and save registers 27 .. 29, 31 on the stack. */
1459 /* Also allocate space for the argument save area. */
1460 /* Called via: jalr __save_r27_r31,r10. */
1479 .size __save_r27_r31,.-__save_r27_r31
1481 /* Restore saved registers, deallocate stack and return to the user. */
1482 /* Called via: jr __return_r27_r31. */
1484 .globl __return_r27_r31
1485 .type __return_r27_r31,@function
1504 .size __return_r27_r31,.-__return_r27_r31
1505 #endif /* L_save_27c */
1510 .globl __save_r28_r31
1511 .type __save_r28_r31,@function
1512 /* Allocate space and save registers 28 .. 29, 31 on the stack. */
1513 /* Also allocate space for the argument save area. */
1514 /* Called via: jalr __save_r28_r31,r10. */
1521 .size __save_r28_r31,.-__save_r28_r31
1523 /* Restore saved registers, deallocate stack and return to the user. */
1524 /* Called via: jr __return_r28_r31. */
1526 .globl __return_r28_r31
1527 .type __return_r28_r31,@function
1534 .size __return_r28_r31,.-__return_r28_r31
1535 #endif /* L_save_28c */
1540 .globl __save_r29_r31
1541 .type __save_r29_r31,@function
1542 /* Allocate space and save registers 29 & 31 on the stack. */
1543 /* Also allocate space for the argument save area. */
1544 /* Called via: jalr __save_r29_r31,r10. */
1550 .size __save_r29_r31,.-__save_r29_r31
1552 /* Restore saved registers, deallocate stack and return to the user. */
1553 /* Called via: jr __return_r29_r31. */
1555 .globl __return_r29_r31
1556 .type __return_r29_r31,@function
1562 .size __return_r29_r31,.-__return_r29_r31
1563 #endif /* L_save_29c */
1569 .type __save_r31,@function
1570 /* Allocate space and save register 31 on the stack. */
1571 /* Also allocate space for the argument save area. */
1572 /* Called via: jalr __save_r31,r10. */
1577 .size __save_r31,.-__save_r31
1579 /* Restore saved registers, deallocate stack and return to the user. */
1580 /* Called via: jr __return_r31. */
1583 .type __return_r31,@function
1588 .size __return_r31,.-__return_r31
1589 #endif /* L_save_31c */
1591 #ifdef L_save_interrupt
1594 .globl __save_interrupt
1595 .type __save_interrupt,@function
1596 /* Save registers r1, r4 on stack and load up with expected values. */
1597 /* Note, 20 bytes of stack have already been allocated. */
1598 /* Called via: jalr __save_interrupt,r10. */
1600 /* add -20,sp ; st.w r11,16[sp] ; st.w r10,12[sp] ; */
1604 movhi hi(__ep),r0,ep
1605 movea lo(__ep),ep,ep
1606 movhi hi(__gp),r0,gp
1607 movea lo(__gp),gp,gp
1609 .size __save_interrupt,.-__save_interrupt
1611 /* Restore saved registers, deallocate stack and return from the interrupt. */
1612 /* Called via: jr __return_interrupt. */
1614 .globl __return_interrupt
1615 .type __return_interrupt,@function
1624 .size __return_interrupt,.-__return_interrupt
1625 #endif /* L_save_interrupt */
1627 #ifdef L_save_all_interrupt
1630 .globl __save_all_interrupt
1631 .type __save_all_interrupt,@function
1632 /* Save all registers except for those saved in __save_interrupt. */
1633 /* Allocate enough stack for all of the registers & 16 bytes of space. */
1634 /* Called via: jalr __save_all_interrupt,r10. */
1635 __save_all_interrupt:
1696 .size __save_all_interrupt,.-__save_all_interrupt
1698 .globl __restore_all_interrupt
1699 .type __restore_all_interrupt,@function
1700 /* Restore all registers saved in __save_all_interrupt and
1701 deallocate the stack space. */
1702 /* Called via: jalr __restore_all_interrupt,r10. */
1703 __restore_all_interrupt:
1764 .size __restore_all_interrupt,.-__restore_all_interrupt
1765 #endif /* L_save_all_interrupt */
1767 #if defined __V850_CALLT__
1768 #if defined(__v850e__) || defined(__v850e1__) || defined(__v850e2__) || defined(__v850e2v3__)
1769 #ifdef L_callt_save_r2_r29
1770 /* Put these functions into the call table area. */
1773 /* Allocate space and save registers 2, 20 .. 29 on the stack. */
1774 /* Called via: callt ctoff(__callt_save_r2_r29). */
1779 prepare {r20 - r29}, 0
1782 /* Restore saved registers, deallocate stack and return to the user. */
1783 /* Called via: callt ctoff(__callt_return_r2_r29). */
1786 dispose 0, {r20-r29}
1791 /* Place the offsets of the start of these routines into the call table. */
1794 .global __callt_save_r2_r29
1795 .type __callt_save_r2_r29,@function
1796 __callt_save_r2_r29: .short ctoff(.L_save_r2_r29)
1798 .global __callt_return_r2_r29
1799 .type __callt_return_r2_r29,@function
1800 __callt_return_r2_r29: .short ctoff(.L_return_r2_r29)
1802 #endif /* L_callt_save_r2_r29. */
1804 #ifdef L_callt_save_r2_r31
1805 /* Put these functions into the call table area. */
1808 /* Allocate space and save registers 2 and 20 .. 29, 31 on the stack. */
1809 /* Also allocate space for the argument save area. */
1810 /* Called via: callt ctoff(__callt_save_r2_r31). */
1815 prepare {r20 - r29, r31}, 0
1818 /* Restore saved registers, deallocate stack and return to the user. */
1819 /* Called via: callt ctoff(__callt_return_r2_r31). */
1822 dispose 0, {r20 - r29, r31}
1827 /* Place the offsets of the start of these routines into the call table. */
1830 .global __callt_save_r2_r31
1831 .type __callt_save_r2_r31,@function
1832 __callt_save_r2_r31: .short ctoff(.L_save_r2_r31)
1834 .global __callt_return_r2_r31
1835 .type __callt_return_r2_r31,@function
1836 __callt_return_r2_r31: .short ctoff(.L_return_r2_r31)
1838 #endif /* L_callt_save_r2_r31 */
1840 #ifdef L_callt_save_interrupt
1841 /* Put these functions into the call table area. */
1844 /* Save registers r1, ep, gp, r10 on stack and load up with expected values. */
1845 /* Called via: callt ctoff(__callt_save_interrupt). */
1848 /* SP has already been moved before callt ctoff(_save_interrupt). */
1849 /* R1,R10,R11,ctpc,ctpsw has alread been saved bofore callt ctoff(_save_interrupt). */
1850 /* addi -28, sp, sp */
1851 /* st.w r1, 24[sp] */
1852 /* st.w r10, 12[sp] */
1853 /* st.w r11, 16[sp] */
1854 /* stsr ctpc, r10 */
1855 /* st.w r10, 20[sp] */
1856 /* stsr ctpsw, r10 */
1857 /* st.w r10, 24[sp] */
1866 /* Restore saved registers, deallocate stack and return from the interrupt. */
1867 /* Called via: callt ctoff(__callt_restore_interrupt). */
1869 .globl __return_interrupt
1870 .type __return_interrupt,@function
1871 .L_return_interrupt:
1884 /* Place the offsets of the start of these routines into the call table. */
1887 .global __callt_save_interrupt
1888 .type __callt_save_interrupt,@function
1889 __callt_save_interrupt: .short ctoff(.L_save_interrupt)
1891 .global __callt_return_interrupt
1892 .type __callt_return_interrupt,@function
1893 __callt_return_interrupt: .short ctoff(.L_return_interrupt)
1895 #endif /* L_callt_save_interrupt */
1897 #ifdef L_callt_save_all_interrupt
1898 /* Put these functions into the call table area. */
1901 /* Save all registers except for those saved in __save_interrupt. */
1902 /* Allocate enough stack for all of the registers & 16 bytes of space. */
1903 /* Called via: callt ctoff(__callt_save_all_interrupt). */
1905 .L_save_all_interrupt:
1943 prepare {r20 - r29, r31}, 0
1946 /* Restore all registers saved in __save_all_interrupt
1947 deallocate the stack space. */
1948 /* Called via: callt ctoff(__callt_restore_all_interrupt). */
1950 .L_restore_all_interrupt:
1951 dispose 0, {r20 - r29, r31}
1991 /* Place the offsets of the start of these routines into the call table. */
1994 .global __callt_save_all_interrupt
1995 .type __callt_save_all_interrupt,@function
1996 __callt_save_all_interrupt: .short ctoff(.L_save_all_interrupt)
1998 .global __callt_restore_all_interrupt
1999 .type __callt_restore_all_interrupt,@function
2000 __callt_restore_all_interrupt: .short ctoff(.L_restore_all_interrupt)
2002 #endif /* L_callt_save_all_interrupt */
2005 #define MAKE_CALLT_FUNCS( START ) \
2008 /* Allocate space and save registers START .. r29 on the stack. */ ;\
2009 /* Called via: callt ctoff(__callt_save_START_r29). */ ;\
2010 .L_save_##START##_r29: ;\
2011 prepare { START - r29 }, 0 ;\
2014 /* Restore saved registers, deallocate stack and return. */ ;\
2015 /* Called via: callt ctoff(__return_START_r29). */ ;\
2017 .L_return_##START##_r29: ;\
2018 dispose 0, { START - r29 }, r31 ;\
2020 /* Place the offsets of the start of these funcs into the call table. */;\
2023 .global __callt_save_##START##_r29 ;\
2024 .type __callt_save_##START##_r29,@function ;\
2025 __callt_save_##START##_r29: .short ctoff(.L_save_##START##_r29 ) ;\
2027 .global __callt_return_##START##_r29 ;\
2028 .type __callt_return_##START##_r29,@function ;\
2029 __callt_return_##START##_r29: .short ctoff(.L_return_##START##_r29 )
2032 #define MAKE_CALLT_CFUNCS( START ) \
2035 /* Allocate space and save registers START .. r31 on the stack. */ ;\
2036 /* Called via: callt ctoff(__callt_save_START_r31c). */ ;\
2037 .L_save_##START##_r31c: ;\
2038 prepare { START - r29, r31}, 0 ;\
2041 /* Restore saved registers, deallocate stack and return. */ ;\
2042 /* Called via: callt ctoff(__return_START_r31c). */ ;\
2044 .L_return_##START##_r31c: ;\
2045 dispose 0, { START - r29, r31}, r31 ;\
2047 /* Place the offsets of the start of these funcs into the call table. */;\
2050 .global __callt_save_##START##_r31c ;\
2051 .type __callt_save_##START##_r31c,@function ;\
2052 __callt_save_##START##_r31c: .short ctoff(.L_save_##START##_r31c ) ;\
2054 .global __callt_return_##START##_r31c ;\
2055 .type __callt_return_##START##_r31c,@function ;\
2056 __callt_return_##START##_r31c: .short ctoff(.L_return_##START##_r31c )
2059 #ifdef L_callt_save_20
2060 MAKE_CALLT_FUNCS (r20)
2062 #ifdef L_callt_save_21
2063 MAKE_CALLT_FUNCS (r21)
2065 #ifdef L_callt_save_22
2066 MAKE_CALLT_FUNCS (r22)
2068 #ifdef L_callt_save_23
2069 MAKE_CALLT_FUNCS (r23)
2071 #ifdef L_callt_save_24
2072 MAKE_CALLT_FUNCS (r24)
2074 #ifdef L_callt_save_25
2075 MAKE_CALLT_FUNCS (r25)
2077 #ifdef L_callt_save_26
2078 MAKE_CALLT_FUNCS (r26)
2080 #ifdef L_callt_save_27
2081 MAKE_CALLT_FUNCS (r27)
2083 #ifdef L_callt_save_28
2084 MAKE_CALLT_FUNCS (r28)
2086 #ifdef L_callt_save_29
2087 MAKE_CALLT_FUNCS (r29)
2090 #ifdef L_callt_save_20c
2091 MAKE_CALLT_CFUNCS (r20)
2093 #ifdef L_callt_save_21c
2094 MAKE_CALLT_CFUNCS (r21)
2096 #ifdef L_callt_save_22c
2097 MAKE_CALLT_CFUNCS (r22)
2099 #ifdef L_callt_save_23c
2100 MAKE_CALLT_CFUNCS (r23)
2102 #ifdef L_callt_save_24c
2103 MAKE_CALLT_CFUNCS (r24)
2105 #ifdef L_callt_save_25c
2106 MAKE_CALLT_CFUNCS (r25)
2108 #ifdef L_callt_save_26c
2109 MAKE_CALLT_CFUNCS (r26)
2111 #ifdef L_callt_save_27c
2112 MAKE_CALLT_CFUNCS (r27)
2114 #ifdef L_callt_save_28c
2115 MAKE_CALLT_CFUNCS (r28)
2117 #ifdef L_callt_save_29c
2118 MAKE_CALLT_CFUNCS (r29)
2122 #ifdef L_callt_save_31c
2125 /* Allocate space and save register r31 on the stack. */
2126 /* Called via: callt ctoff(__callt_save_r31c). */
2131 /* Restore saved registers, deallocate stack and return. */
2132 /* Called via: callt ctoff(__return_r31c). */
2134 .L_callt_return_r31c:
2135 dispose 0, {r31}, r31
2137 /* Place the offsets of the start of these funcs into the call table. */
2140 .global __callt_save_r31c
2141 .type __callt_save_r31c,@function
2142 __callt_save_r31c: .short ctoff(.L_callt_save_r31c)
2144 .global __callt_return_r31c
2145 .type __callt_return_r31c,@function
2146 __callt_return_r31c: .short ctoff(.L_callt_return_r31c)
2149 #endif /* __v850e__ */
2150 #endif /* __V850_CALLT__ */
2152 /* libgcc2 routines for NEC V850. */
2153 /* Double Integer Arithmetical Operation. */
2158 .type ___negdi2, @function
2167 .size ___negdi2,.-___negdi2
2173 .type ___cmpdi2,@function
2175 # Signed comparison bitween each high word.
2183 # Unsigned comparigon bitween each low word.
2189 .size ___cmpdi2, . - ___cmpdi2
2195 .type ___ucmpdi2,@function
2197 cmp r9, r7 # Check if each high word are same.
2198 bne .L_ucmpdi_check_psw
2199 cmp r8, r6 # Compare the word.
2200 .L_ucmpdi_check_psw:
2203 add r6, r10 # Add the result of comparison NL and comparison H.
2205 .size ___ucmpdi2, . - ___ucmpdi2
2211 .type ___muldi3,@function
2214 jarl __save_r26_r31, r10
2218 movea lo(32767), r0, r14
2295 movhi hi(131071), r0, r12
2296 movea lo(131071), r12, r13
2319 #else /* defined(__v850e__) */
2320 /* (Ahi << 32 + Alo) * (Bhi << 32 + Blo) */
2323 mulu r7, r8, r0 /* Ahi * Blo */
2324 mulu r6, r9, r0 /* Alo * Bhi */
2325 mulu r6, r10, r11 /* Alo * Blo */
2329 #endif /* defined(__v850e__) */
2330 .size ___muldi3, . - ___muldi3