Mercurial > hg > octave-nkf
annotate liboctave/sun-utils.h @ 12107:1fc9fd052f0c release-3-2-x
fix typo in expm
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 25 Nov 2009 12:05:03 +0100 |
parents | 16f53d29049f |
children | 4c0cdbe0acca |
rev | line source |
---|---|
3 | 1 /* |
2 | |
9245 | 3 Copyright (C) 1993, 1994, 1995, 1996, 1997, 2005, 2007, 2009 John W. Eaton |
3 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave 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 | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
3 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
3 | 20 |
21 */ | |
22 | |
382 | 23 #if !defined (octave_sun_utils_h) |
24 #define octave_sun_utils_h 1 | |
25 | |
1359 | 26 // This is only needed to dereference pointers to doubles if mixing |
9179
5be2e6696772
use access_double and assign_double on sparc only
Carsten Clark <tantumquantum+gnuoctave@gmail.com>
parents:
7017
diff
changeset
|
27 // GCC and Sun SPARC f77/cc compiled code. See the GCC manual (where the |
1359 | 28 // function access_double() is described) and the Sun f77 manual, |
29 // which explains that doubles are not always aligned on 8 byte | |
30 // boundaries. | |
3 | 31 |
9179
5be2e6696772
use access_double and assign_double on sparc only
Carsten Clark <tantumquantum+gnuoctave@gmail.com>
parents:
7017
diff
changeset
|
32 #if defined (__sparc) && defined (__GNUC__) |
3 | 33 |
34 inline double | |
35 access_double (double *unaligned_ptr) | |
36 { | |
37 union d2i { double d; int i[2]; }; | |
38 | |
39 union d2i *p = (union d2i *) unaligned_ptr; | |
40 union d2i u; | |
41 | |
42 u.i[0] = p->i[0]; | |
43 u.i[1] = p->i[1]; | |
44 | |
45 return u.d; | |
46 } | |
47 | |
48 inline void | |
49 assign_double (double *unaligned_ptr, double value) | |
50 { | |
51 union d2i { double d; int i[2]; }; | |
52 | |
53 double *ptr = &value; | |
54 union d2i *v = (union d2i *) ptr; | |
55 union d2i *p = (union d2i *) unaligned_ptr; | |
56 | |
57 p->i[0] = v->i[0]; | |
58 p->i[1] = v->i[1]; | |
59 } | |
60 | |
61 #endif | |
62 #endif | |
63 | |
64 /* | |
65 ;;; Local Variables: *** | |
1994 | 66 ;;; mode: C *** |
3 | 67 ;;; page-delimiter: "^/\\*" *** |
68 ;;; End: *** | |
69 */ |