OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgcc/] [config/] [rx/] [rx-abi-functions.c] - Blame information for rev 761

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 734 jeremybenn
/* RX C ABI functions
2
   Copyright (C) 2009 Free Software Foundation, Inc.
3
   Contributed by Red Hat.
4
 
5
   This file is part of GCC.
6
 
7
   GCC is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3, or (at your option)
10
   any later version.
11
 
12
   GCC is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
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.
20
 
21
   You should have received a copy of the GNU General Public License
22
   along with GCC; see the file COPYING3.  If not see
23
   <http://www.gnu.org/licenses/>.  */
24
 
25
 
26
/* The RX C ABI includes the specification of a set of compiler support
27
   functions.  Libgcc2 includes some of them, although the names have to
28
   be changed (see rx-abi.h), and the rest are defined here.
29
 
30
   FIXME: Given that FINE_GRAINED_LIBRARIES is defined we ought to consider
31
   compiling this file multiple times with one function per iteration being
32
   compiled.  */
33
 
34
#ifdef __RX_64BIT_DOUBLES__
35
 
36
int _COM_CMPLTd (double a, double b) { return __ltdf2 (a, b) == -1; }
37
int _COM_CMPGTd (double a, double b) { return __gtdf2 (a, b) == 1; }
38
int _COM_CMPLEd (double a, double b) { return __ledf2 (a, b) != 1; }
39
int _COM_CMPGEd (double a, double b) { return __gedf2 (a, b) != -1; }
40
int _COM_CMPEQd (double a, double b) { return __eqdf2 (a, b) == 0; }
41
int _COM_CMPNEd (double a, double b) { return __nedf2 (a, b) != 0; }
42
 
43
int _COM_CMPLTf (double, double) __attribute__ ((weak, alias ("_COM_CMPLTd")));
44
int _COM_CMPGTf (double, double) __attribute__ ((weak, alias ("_COM_CMPGTd")));
45
int _COM_CMPLEf (double, double) __attribute__ ((weak, alias ("_COM_CMPLEd")));
46
int _COM_CMPGEf (double, double) __attribute__ ((weak, alias ("_COM_CMPGEd")));
47
int _COM_CMPEQf (double, double) __attribute__ ((weak, alias ("_COM_CMPEQd")));
48
int _COM_CMPNEf (double, double) __attribute__ ((weak, alias ("_COM_CMPNEd")));
49
 
50
#else /* 32-bit doubles.  */
51
 
52
double _COM_CONVfd (float a) { return a; }
53
float  _COM_CONVdf (double a) { return a; }
54
 
55
int _COM_CMPLTd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPLTf")));
56
int _COM_CMPGTd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPGTf")));
57
int _COM_CMPLEd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPLEf")));
58
int _COM_CMPGEd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPGEf")));
59
int _COM_CMPEQd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPEQf")));
60
int _COM_CMPNEd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPNEf")));
61
 
62
signed long long   _COM_CONVd64s (double a) { return (signed long long) a; }
63
unsigned long long _COM_CONVd64u (double a)  { return (unsigned long long) a; }
64
 
65
int _COM_CMPLTf (float a, float b) { return __ltsf2 (a, b) == -1; }
66
int _COM_CMPGTf (float a, float b) { return __gtsf2 (a, b) == 1; }
67
int _COM_CMPLEf (float a, float b) { return __lesf2 (a, b) != 1; }
68
int _COM_CMPGEf (float a, float b) { return __gesf2 (a, b) != -1; }
69
int _COM_CMPEQf (float a, float b) { return __eqsf2 (a, b) == 0; }
70
int _COM_CMPNEf (float a, float b) { return __nesf2 (a, b) != 0; }
71
 
72
#endif /* 64-bit vs 32-bit doubles.  */
73
 
74
double _COM_CONV64sd (signed long long a)   { return (double) a; }
75
double _COM_CONV64ud (unsigned long long a) { return (double) a; }
76
 
77
extern int __cmpdi2 (long long, long long);
78
extern int __ucmpdi2 (long long, long long);
79
 
80
int _COM_CMPLT64s (long long a, long long b) { return __cmpdi2 (a, b)  == 0; }
81
int _COM_CMPLT64u (long long a, long long b) { return __ucmpdi2 (a, b) == 0; }
82
int _COM_CMPGT64s (long long a, long long b) { return __cmpdi2 (a, b)  == 2; }
83
int _COM_CMPGT64u (long long a, long long b) { return __ucmpdi2 (a, b) == 2; }
84
int _COM_CMPLE64s (long long a, long long b) { return __cmpdi2 (a, b)  != 2; }
85
int _COM_CMPLE64u (long long a, long long b) { return __ucmpdi2 (a, b) != 2; }
86
int _COM_CMPGE64s (long long a, long long b) { return __cmpdi2 (a, b)  != 0; }
87
int _COM_CMPGE64u (long long a, long long b) { return __ucmpdi2 (a, b) != 0; }
88
int _COM_CMPEQ64  (long long a, long long b) { return __cmpdi2 (a, b)  == 1; }
89
int _COM_CMPNE64  (long long a, long long b) { return __cmpdi2 (a, b)  != 1; }
90
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.