Subversion Repositories tendra.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
2
    		 Crown Copyright (c) 1997
3
 
4
    This TenDRA(r) Computer Program is subject to Copyright
5
    owned by the United Kingdom Secretary of State for Defence
6
    acting through the Defence Evaluation and Research Agency
7
    (DERA).  It is made available to Recipients with a
8
    royalty-free licence for its use, reproduction, transfer
9
    to other parties and amendment for any purpose not excluding
10
    product development provided that any such use et cetera
11
    shall be deemed to be acceptance of the following conditions:-
12
 
13
        (1) Its Recipients shall ensure that this Notice is
14
        reproduced upon any copies or amended versions of it;
15
 
16
        (2) Any amended version of it shall be clearly marked to
17
        show both the nature of and the organisation responsible
18
        for the relevant amendment or amendments;
19
 
20
        (3) Its onward transfer from a recipient to another
21
        party shall be deemed to be that party's acceptance of
22
        these conditions;
23
 
24
        (4) DERA gives no warranty or assurance as to its
25
        quality or suitability for any purpose and DERA accepts
26
        no liability whatsoever in relation to any use to which
27
        it may be put.
28
*/
29
	/* **************************************************** */
30
	/*							*/
31
	/*  Target Dependency Token Definitions for aix_rs6000	*/
32
	/*							*/
33
	/* **************************************************** */
34
 
35
 
36
 
37
 
38
	/* LOCAL TOKENS */
39
 
40
 
41
Tokdef REP_V = [] VARIETY
42
	/* variety for integer widths and float_sequence */
43
var_width (false, 16);
44
 
45
 
46
Tokdef NATTEST = [a:NAT, comp:NTEST, b:NAT] EXP
47
	/* comparison of nats, for static conditionals */
48
? { ?(snat_from_nat(false,a)(REP_V) comp snat_from_nat(false,b)(REP_V));
49
    1(REP_V)
50
  | 0(REP_V)
51
};
52
 
53
 
54
Tokdef PUN = [from_sh:SHAPE, to_sh:SHAPE, val:EXP] EXP
55
	/* representation preserving conversion */
56
component (to_sh,
57
  Cons [ shape_offset(from_sh) .max. shape_offset(to_sh) ] (
58
    offset_zero(alignment(from_sh)) : val
59
  ),
60
  offset_zero(alignment(to_sh))
61
);
62
 
63
 
64
Tokdef PTR_V = [] VARIETY
65
	/* variety for converted pointers */
66
var_width (true, 32);
67
 
68
 
69
 
70
 
71
	/* INTEGER VARIETY REPRESENTATIONS */
72
 
73
 
74
Tokdef .~rep_var_width = [w:NAT] NAT
75
NAT ? ( NATTEST [w, <=, 8],
76
  8,
77
  NAT ? ( NATTEST [w, <=, 16],
78
    16,
79
    NAT ? ( NATTEST [w, <=, 32],
80
      32,
81
      NAT ? ( NATTEST [w, <=, 64],
82
        64,
83
 
84
      )
85
    )
86
  )
87
);
88
 
89
 
90
Tokdef .~rep_atomic_width = [] NAT
91
32;
92
 
93
 
94
 
95
 
96
	/* FLOATING VARIETY REPRESENTATIONS */
97
 
98
/* sequence: 1=single, 2=double, 3=extended */
99
 
100
 
101
Tokdef .~rep_fv = [n:NAT] FLOATING_VARIETY
102
FLOATING_VARIETY ? ( NATTEST [n, ==, 1],
103
  flvar_parms (2, 24, 126, 127),
104
  FLOATING_VARIETY ? ( NATTEST [n, ==, 2],
105
    flvar_parms (2, 53, 1022, 1023),
106
    flvar_parms(
107
	computed_nat(#"No extended floats on current implementation"),
108
	0, 0, 0)
109
  )
110
);
111
 
112
 
113
Tokdef .~rep_fv_width = [n:NAT] NAT
114
NAT ? ( NATTEST [n, ==, 1],
115
  32,
116
  NAT ? ( NATTEST [n, ==, 2],
117
    64,
118
 
119
    )
120
);
121
 
122
 
123
Tokdef .~rep_fv_radix = [n:NAT] NAT
124
2;
125
 
126
 
127
Tokdef .~rep_fv_mantissa = [n:NAT] NAT
128
NAT ? ( NATTEST [n, ==, 1],
129
  24,
130
  53
131
);
132
 
133
 
134
Tokdef .~rep_fv_min_exp = [n:NAT] NAT
135
NAT ? ( NATTEST [n, ==, 1],
136
  149,
137
  1074
138
);
139
 
140
 
141
Tokdef .~rep_fv_max_exp = [n:NAT] NAT
142
NAT ? ( NATTEST [n, ==, 1],
143
  127,
144
  1023
145
);
146
 
147
 
148
Tokdef .~rep_fv_epsilon = [n:NAT] EXP
149
EXP ? ( NATTEST [n, ==, 1],
150
  (2r1.0 E -23 (.~rep_fv[n])),
151
  (2r1.0 E -52 (.~rep_fv[n]))
152
);
153
 
154
 
155
Tokdef .~rep_fv_min_val = [n:NAT] EXP
156
EXP ? ( NATTEST [n, ==, 1],
157
  (2r1.0 E -149 (.~rep_fv[n])),
158
  (2r1.0 E -1074 (.~rep_fv[n]))
159
);
160
 
161
 
162
Tokdef .~rep_fv_max_val = [n:NAT] EXP
163
EXP ? ( NATTEST [n, ==, 1],
164
  (8r3.77777774 E 42 (.~rep_fv[n])),
165
  (8r1.777777777777777774 E 341 (.~rep_fv[n]))
166
);
167
 
168
 
169
 
170
 
171
	/* NON-NUMERIC REPRESENTATIONS */
172
 
173
 
174
Tokdef .~ptr_width = [] NAT
175
32;
176
 
177
 
178
Tokdef .~best_div = [] NAT
179
2;
180
 
181
 
182
Tokdef .~little_endian = [] BOOL
183
false;
184
 
185
 
186
 
187
 
188
	/* COMMON CONVERSION ROUTINES */
189
 
190
 
191
Tokdef .~ptr_to_ptr = [a1:ALIGNMENT, a2:ALIGNMENT, p:EXP] EXP
192
PUN [ pointer(a1), pointer(a2), p ];
193
 
194
 
195
Tokdef .~ptr_to_int = [a:ALIGNMENT, v:VARIETY, p:EXP] EXP
196
([v] PUN [ pointer(a), integer(PTR_V), p ]);
197
 
198
 
199
Tokdef .~int_to_ptr = [v:VARIETY, a:ALIGNMENT, i:EXP] EXP
200
PUN [ integer(PTR_V), pointer(a), [PTR_V] i ];
201
 
202
 
203
Tokdef .~f_to_ptr = [a:ALIGNMENT, fn:EXP] EXP
204
PUN [ proc, pointer(a), fn ];
205
 
206
 
207
Tokdef .~ptr_to_f = [a:ALIGNMENT, p:EXP] EXP
208
PUN [ pointer(a), proc, p ];
209
 
210
 
211
 
212
 
213
Keep (
214
.~rep_var_width, .~rep_atomic_width,
215
.~rep_fv, .~rep_fv_width, .~rep_fv_radix, .~rep_fv_mantissa, .~rep_fv_min_exp, 
216
.~rep_fv_max_exp, .~rep_fv_epsilon, .~rep_fv_min_val, .~rep_fv_max_val,
217
.~ptr_width, .~best_div, .~little_endian,
218
.~ptr_to_ptr, .~ptr_to_int, .~int_to_ptr, .~f_to_ptr, .~ptr_to_f
219
)