1 /* libgcc1 routines for 68000 w/o floating-poi 2 Copyright (C) 1994, 1996, 1997, 1998 Free S 3 4 This file is part of GNU CC. 5 6 GNU CC is free software; you can redistribute 7 under the terms of the GNU General Public Lice 8 Free Software Foundation; either version 2, or 9 later version. 10 11 In addition to the permissions in the GNU Gene 12 Free Software Foundation gives you unlimited p 13 compiled version of this file with other progr 14 those programs without any restriction coming 15 file. (The General Public License restriction 16 respects; for example, they cover modification 17 distribution when not linked into another prog 18 19 This file is distributed in the hope that it w 20 WITHOUT ANY WARRANTY; without even the implied 21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PU 22 General Public License for more details. */ 23 24 /* As a special exception, if you link this li 25 compiled with GCC to produce an executable, 26 the resulting executable to be covered by t 27 This exception does not however invalidate 28 the executable file might be covered by the 29 30 /* Use this one for any 680x0; assumes no floa 31 The trailing " '" appearing on some lines i 32 Some of this code comes from MINIX, via the 33 D. V. Henkel-Wallace (gumby@cygnus.com) Fet 34 */ 35 36 #include <linux/export.h> 37 38 /* These are predefined by new versions of GNU 39 40 #ifndef __USER_LABEL_PREFIX__ 41 #define __USER_LABEL_PREFIX__ _ 42 #endif 43 44 #ifndef __REGISTER_PREFIX__ 45 #define __REGISTER_PREFIX__ 46 #endif 47 48 #ifndef __IMMEDIATE_PREFIX__ 49 #define __IMMEDIATE_PREFIX__ # 50 #endif 51 52 /* ANSI concatenation macros. */ 53 54 #define CONCAT1(a, b) CONCAT2(a, b) 55 #define CONCAT2(a, b) a ## b 56 57 /* Use the right prefix for global labels. */ 58 59 #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, 60 61 /* Use the right prefix for registers. */ 62 63 #define REG(x) CONCAT1 (__REGISTER_PREFIX__, x 64 65 /* Use the right prefix for immediate values. 66 67 #define IMM(x) CONCAT1 (__IMMEDIATE_PREFIX__, 68 69 #define d0 REG (d0) 70 #define d1 REG (d1) 71 #define d2 REG (d2) 72 #define d3 REG (d3) 73 #define d4 REG (d4) 74 #define d5 REG (d5) 75 #define d6 REG (d6) 76 #define d7 REG (d7) 77 #define a0 REG (a0) 78 #define a1 REG (a1) 79 #define a2 REG (a2) 80 #define a3 REG (a3) 81 #define a4 REG (a4) 82 #define a5 REG (a5) 83 #define a6 REG (a6) 84 #define fp REG (fp) 85 #define sp REG (sp) 86 87 .text 88 .proc 89 .globl SYM (__divsi3) 90 SYM (__divsi3): 91 movel d2, sp@- 92 93 moveq IMM (1), d2 /* sign of res 94 movel sp@(12), d1 /* d1 = diviso 95 jpl L1 96 negl d1 97 #if !(defined(__mcf5200__) || defined(__mcoldf 98 negb d2 /* change sign 99 #else 100 negl d2 /* change sign 101 #endif 102 L1: movel sp@(8), d0 /* d0 = divide 103 jpl L2 104 negl d0 105 #if !(defined(__mcf5200__) || defined(__mcoldf 106 negb d2 107 #else 108 negl d2 109 #endif 110 111 L2: movel d1, sp@- 112 movel d0, sp@- 113 jbsr SYM (__udivsi3) /* divide abs( 114 addql IMM (8), sp 115 116 tstb d2 117 jpl L3 118 negl d0 119 120 L3: movel sp@+, d2 121 rts 122 123 EXPORT_SYMBOL(__divsi3)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.