Subversion Repositories tendra.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
2
    Copyright (c) 1993 Open Software Foundation, Inc.
3
 
4
 
5
    All Rights Reserved
6
 
7
 
8
    Permission to use, copy, modify, and distribute this software
9
    and its documentation for any purpose and without fee is hereby
10
    granted, provided that the above copyright notice appears in all
11
    copies and that both the copyright notice and this permission
12
    notice appear in supporting documentation.
13
 
14
 
15
    OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING
16
    ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
17
    PARTICULAR PURPOSE.
18
 
19
 
20
    IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
21
    CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
22
    LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
23
    NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
24
    WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25
*/
26
 
27
/*
28
    		 Crown Copyright (c) 1997
29
 
30
    This TenDRA(r) Computer Program is subject to Copyright
31
    owned by the United Kingdom Secretary of State for Defence
32
    acting through the Defence Evaluation and Research Agency
33
    (DERA).  It is made available to Recipients with a
34
    royalty-free licence for its use, reproduction, transfer
35
    to other parties and amendment for any purpose not excluding
36
    product development provided that any such use et cetera
37
    shall be deemed to be acceptance of the following conditions:-
38
 
39
        (1) Its Recipients shall ensure that this Notice is
40
        reproduced upon any copies or amended versions of it;
41
 
42
        (2) Any amended version of it shall be clearly marked to
43
        show both the nature of and the organisation responsible
44
        for the relevant amendment or amendments;
45
 
46
        (3) Its onward transfer from a recipient to another
47
        party shall be deemed to be that party's acceptance of
48
        these conditions;
49
 
50
        (4) DERA gives no warranty or assurance as to its
51
        quality or suitability for any purpose and DERA accepts
52
        no liability whatsoever in relation to any use to which
53
        it may be put.
54
*/
55
 
56
 
57
 
58
/**********************************************************************
59
$Author: release $
60
$Date: 1998/02/04 15:49:06 $
61
$Revision: 1.2 $
62
$Log: regable.c,v $
63
 * Revision 1.2  1998/02/04  15:49:06  release
64
 * Added OSF copyright message.
65
 *
66
 * Revision 1.1.1.1  1998/01/17  15:55:57  release
67
 * First version to be checked into rolling release.
68
 *
69
 * Revision 1.2  1996/10/04  16:03:54  pwe
70
 * add banners and mod for PWE ownership
71
 *
72
**********************************************************************/
73
 
74
 
75
/******************************************************************
76
		regable.c
77
 
78
	This has procedures to determine whether ident exp will fit in a
79
register.  Called, for example, by needs scan which uses these procs to
80
decide whether to mark the props of the exp with inreg_bits or infreg_bits
81
or neither.
82
 
83
******************************************************************/
84
 
85
#include "config.h"
86
#include "memtdf.h"
87
#include "codegen.h"
88
 
89
#include "comment.h"
90
 
91
#include "regable.h"
92
 
93
 
94
/***************************************************************
95
	fixregable
96
 
97
determines whether the exp e can fit in a single fixed point register. Uses
98
macros isvis, isglob, iscaonly from expmacs.h which examine the props
99
field. The iscaonly bit is set by proc independent if the tag is only used
100
by the contents operator or as the left hand side of an assignment. The
101
procedure also uses the macro is_floating from shapemacs.h which checks
102
the shape number is in the range for floating point shapes.
103
****************************************************************/
104
bool valregable PROTO_N ((s)) PROTO_T (shape s)
105
{
106
  int n = name(s);
107
 
108
  if (is_floating(n) || IS_AGGREGATE(s))
109
  {
110
    /* floats, compound and arreay not generally in fixed reg */
111
    return 0;
112
  }
113
  else
114
  {
115
    return shape_size(s)<=32 && n!=tophd;
116
  }
117
}
118
 
119
bool fixregable PROTO_N ((e)) PROTO_T (exp e)
120
{
121
  if (!isvis(e) && !isoutpar(e) && !isglob(e) )
122
  {
123
    shape s = sh(son(e));	/* son of ident exp is def */
124
 
125
    return valregable(s);
126
  }
127
  else
128
  {
129
    return 0;
130
  }
131
}
132
 
133
/***************************************************************
134
	floatregable
135
 
136
determines whether the exp e can fit in a floating point register, single
137
or double.
138
***************************************************************/
139
 
140
bool floatregable PROTO_N ((e)) PROTO_T (exp e)
141
{
142
  if (!isvis(e) && !isoutpar(e) && !isglob(e) )
143
  {
144
    shape s = sh(son(e));
145
 
146
    return is_floating(name(s));
147
  }
148
  else
149
  {
150
    return 0;
151
  }
152
}