]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/powerpc/pr64505.c
Get rid of dg-skip-if etc. default args
[thirdparty/gcc.git] / gcc / testsuite / gcc.target / powerpc / pr64505.c
1 /* { dg-do compile { target { powerpc*-*-* && ilp32 } } } */
2 /* { dg-skip-if "" { powerpc*-*-aix* } } */
3 /* { dg-options "-O2 -mpowerpc64" } */
4
5 /*
6 * (below is inlined and simplified from previously included headers)
7 */
8
9 struct fltcom_st {
10 short fltbuf[950];
11 } fltcom_ __attribute__((common)) ;
12 #define CM_PLIBOR (*(((double *)&fltcom_ + 1)))
13 #define CM_QMRG (*(((double *)&fltcom_ + 2)))
14
15 struct fltcom2_st {
16 short fltbuf2[56];
17 } fltcom2_ __attribute__((common)) ;
18 #define CM_FLPRV ((short *)&fltcom2_ + 17)
19 #define CM_FLNXT ((short *)&fltcom2_ + 20)
20 #define CM_FLCPN (*(((double *)&fltcom2_)))
21 #define CM_FLCNT (*(((short *)&fltcom2_ + 12)))
22
23 struct aidatcm_st {
24 double cm_aid, cm_ext, cm_basis;
25 short cm_aiday, cm_exday, cm_dperd, cm_aiexf, cm_aidex, cm_aiok,
26 cm_aigdo, cm_aildo, cm_prev[3], cm_next[3], cm_aid_pad[2];
27 double cm_rvgfact, cm_ai1st, cm_ai2nd;
28 int cm_aieurok;
29 } aidatcm_ __attribute__((common)) ;
30 #define CM_EXDAY aidatcm_.cm_exday
31 #define CM_BASIS aidatcm_.cm_basis
32 #define CM_PREV aidatcm_.cm_prev
33
34 struct cshfcm_st {
35 short bufff[10862];
36 } cshfcm_ __attribute__((common)) ;
37 #define CM_FNUM (*(((short *)&cshfcm_ + 9038)))
38 #define CM_FIFLX ((double *)&cshfcm_ + 1)
39 #define CM_FEXTX ((double *)&cshfcm_ + 1201)
40 #define CM_FSHDT ((short *)&cshfcm_ + 7230)
41
42 struct calctsdb_st {
43 short calctsdbbuff[115];
44 } calctsdb_ __attribute__((common)) ;
45 #define CM_CTUP_GOOD_TO_GO (*(((short *)&calctsdb_ + 16)))
46 #define CM_PAYMENT_FREQUENCY (*(((short *)&calctsdb_ + 61)))
47 #define CM_DISCOUNTING_DAYTYP (*(((short *)&calctsdb_ + 59)))
48
49 struct cf600cm_st {
50 short bufcf[14404];
51 } cf600cm_ __attribute__((common)) ;
52 #define CM_FLT_RFIXRATES ((double *)&cf600cm_ + 600)
53
54 typedef struct { int id; int type; const char *name; } bregdb_bitinfo_t;
55
56 int
57 bregdb_eval_bbitcxt_bool_rv(const bregdb_bitinfo_t * const bbit,
58 const int bbit_default,
59 const void * const bregucxt);
60
61 static const bregdb_bitinfo_t bbit_calc_dr_d33 =
62 { 160667, 5, "bbit_calc_dr_d33" };
63 #define bbit_calc_dr_d33__value() \
64 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d33, 0, 0)
65 static const bregdb_bitinfo_t bbit_calc_sx_b24 =
66 { 158854, 5, "bbit_calc_sx_b24" };
67 #define bbit_calc_sx_b24__value() \
68 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_sx_b24, 0, 0)
69 static const bregdb_bitinfo_t bbit_calc_dr_d36 =
70 { 161244, 5, "bbit_calc_dr_d36" };
71 #define bbit_calc_dr_d36__value() \
72 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d36, 0, 0)
73 static const bregdb_bitinfo_t bbit_calc_dr_d37 =
74 { 161315, 5, "bbit_calc_dr_d37" };
75 #define bbit_calc_dr_d37__value() \
76 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d37, 0, 0)
77 static const bregdb_bitinfo_t bbit_calc_dr_d47 =
78 { 163259, 5, "bbit_calc_dr_d47" };
79 #define bbit_calc_dr_d47__value() \
80 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d47, 0, 0)
81 static const bregdb_bitinfo_t bbit_calc_dr_d46 =
82 { 163239, 5, "bbit_calc_dr_d46" };
83 #define bbit_calc_dr_d46__value() \
84 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d46, 0, 0)
85 static const bregdb_bitinfo_t bbit_calc_dr_d62 =
86 { 166603, 5, "bbit_calc_dr_d62" };
87 #define bbit_calc_dr_d62__value() \
88 bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d62, 0, 0)
89
90
91
92 int dtyp_is_actact_(short *daytyp);
93 double rnd_trunc_numb(double in, short num_digits, short rnd_or_trunc);
94 void datetrn_(const short* dt, short* dt2);
95 short difday_(short* daytyp_in, short* srtdti, short* enddti, short* ercode);
96
97
98 double pow(double x, double y);
99
100
101 /*
102 * (above is inlined and simplified from previously included headers)
103 */
104
105
106 void calc_1566(
107 short sCalcType,
108 short sDayType,
109 short sFreq,
110 short asSettleDt[3],
111 short asMtyDt[3],
112 short asIssueDt[3],
113 short asFCpnDt[3],
114 double dCpn,
115 short *psNoPer,
116 double *pdExt,
117 double *pdAI,
118 double *pdAI2,
119 double *pdFCpn,
120 short *psRcode)
121 {
122
123 short ercode = 0;
124 int isactact;
125 short days_to_next_cpn = 0;
126 const short discDaytype = CM_DISCOUNTING_DAYTYP;
127
128 if(bbit_calc_sx_b24__value())
129 isactact = (dtyp_is_actact_(&sDayType) != 0);
130 else
131 isactact = (sDayType == 1 || sDayType == 10);
132
133 short days_in_current_period = difday_(&sDayType,CM_FLPRV,CM_FLNXT,&ercode);
134 const short sfreq1 = (CM_CTUP_GOOD_TO_GO == 1 && CM_PAYMENT_FREQUENCY == 1);
135
136 for (int j = 0; j < CM_FNUM; j++) {
137
138 if(j == 0) {
139 days_to_next_cpn = difday_(&sDayType,asSettleDt,CM_FLNXT,&ercode);
140
141 if(isactact) {
142 CM_FIFLX[j] = CM_FLCPN / sFreq;
143 CM_FEXTX[j] = (double)days_to_next_cpn / (double)days_in_current_period;
144 }
145 else {
146 CM_FIFLX[j] = CM_FLCPN * days_in_current_period;
147 CM_FEXTX[j] = (double)days_to_next_cpn / (double)(1/sfreq1);
148 }
149
150 if(CM_FNUM == 1) {
151 CM_FEXTX[j] = (double)days_to_next_cpn / ((double)1/sfreq1);
152 }
153 }
154 else {
155
156 short days_from_settle, days_in_period;
157
158 if(bbit_calc_dr_d46__value()){
159 days_from_settle = difday_(&sDayType,asSettleDt,
160 &CM_FSHDT[j*3],&ercode);
161 days_in_period = difday_(&sDayType,&CM_FSHDT[(j-1)*3],
162 &CM_FSHDT[j*3],&ercode);
163 }
164
165 double cpn_rate = CM_PLIBOR;
166
167 if(bbit_calc_dr_d62__value()) {
168 if(j < CM_FLCNT && CM_FLT_RFIXRATES[j] != 0) cpn_rate = CM_FLT_RFIXRATES[j];
169 }
170 else {
171 if(j < CM_FLCNT ) cpn_rate = CM_FLT_RFIXRATES[j];
172 }
173
174 if(bbit_calc_dr_d37__value()&& j >= CM_FLCNT && sCalcType == 1570) {
175 cpn_rate = CM_PLIBOR + CM_QMRG;
176
177 if(bbit_calc_dr_d36__value()){
178 double projected_rate = pow((1 + CM_PLIBOR/100.0),
179 (days_in_period)) - 1;
180
181 projected_rate = projected_rate + CM_QMRG/100.0 * days_in_period;
182 cpn_rate = 100 * projected_rate * (1/days_in_period);
183 }
184 }
185
186
187 if(isactact) {
188 CM_FIFLX[j] = cpn_rate / sFreq;
189 CM_FEXTX[j] = CM_FEXTX[j-1] + 1;
190
191 if(bbit_calc_dr_d46__value() && discDaytype != 0) {
192 CM_FEXTX[j] = (double)days_from_settle / (double)(1/sfreq1);
193 }
194 }
195 else {
196 if(!bbit_calc_dr_d46__value()){
197 days_from_settle = difday_(&sDayType,asSettleDt,
198 &CM_FSHDT[j*3],&ercode);
199 days_in_period = difday_(&sDayType,&CM_FSHDT[(j-1)*3],
200 &CM_FSHDT[j*3],&ercode);
201
202 }
203
204 CM_FIFLX[j] = cpn_rate * days_in_period;
205 CM_FEXTX[j] = (double)days_from_settle / (double)(1/sfreq1);
206 }
207
208 }
209
210 if(bbit_calc_dr_d33__value() && CM_CTUP_GOOD_TO_GO != 0) {
211 CM_FIFLX[j] = rnd_trunc_numb (CM_FIFLX[j], 0, 0);
212 }
213
214 }
215
216
217 short accrued_days = difday_(&sDayType,CM_FLPRV,asSettleDt,&ercode);
218
219 if(!bbit_calc_dr_d47__value()) {
220 if(isactact) {
221 *pdAI = (CM_FLCPN / sFreq)* accrued_days / ((double)days_in_current_period);
222 }
223 else{
224 *pdAI = (CM_FLCPN / sFreq)* accrued_days / ((double)1/sFreq);
225 }
226 }
227
228 CM_EXDAY = days_to_next_cpn;
229 CM_BASIS = days_in_current_period;
230 datetrn_(CM_FLPRV,CM_PREV);
231 }