1 /* { dg-do compile { target { powerpc*-*-* && ilp32 } } } */
2 /* { dg-skip-if "" { powerpc*-*-aix* } } */
3 /* { dg-options "-O2 -mpowerpc64" } */
6 * (below is inlined and simplified from previously included headers)
11 } fltcom_
__attribute__((common
)) ;
12 #define CM_PLIBOR (*(((double *)&fltcom_ + 1)))
13 #define CM_QMRG (*(((double *)&fltcom_ + 2)))
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)))
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
;
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
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)
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)))
51 } cf600cm_
__attribute__((common
)) ;
52 #define CM_FLT_RFIXRATES ((double *)&cf600cm_ + 600)
54 typedef struct { int id
; int type
; const char *name
; } bregdb_bitinfo_t
;
57 bregdb_eval_bbitcxt_bool_rv(const bregdb_bitinfo_t
* const bbit
,
58 const int bbit_default
,
59 const void * const bregucxt
);
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)
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
);
98 double pow(double x
, double y
);
102 * (above is inlined and simplified from previously included headers)
125 short days_to_next_cpn
= 0;
126 const short discDaytype
= CM_DISCOUNTING_DAYTYP
;
128 if(bbit_calc_sx_b24__value())
129 isactact
= (dtyp_is_actact_(&sDayType
) != 0);
131 isactact
= (sDayType
== 1 || sDayType
== 10);
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);
136 for (int j
= 0; j
< CM_FNUM
; j
++) {
139 days_to_next_cpn
= difday_(&sDayType
,asSettleDt
,CM_FLNXT
,&ercode
);
142 CM_FIFLX
[j
] = CM_FLCPN
/ sFreq
;
143 CM_FEXTX
[j
] = (double)days_to_next_cpn
/ (double)days_in_current_period
;
146 CM_FIFLX
[j
] = CM_FLCPN
* days_in_current_period
;
147 CM_FEXTX
[j
] = (double)days_to_next_cpn
/ (double)(1/sfreq1
);
151 CM_FEXTX
[j
] = (double)days_to_next_cpn
/ ((double)1/sfreq1
);
156 short days_from_settle
, days_in_period
;
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
);
165 double cpn_rate
= CM_PLIBOR
;
167 if(bbit_calc_dr_d62__value()) {
168 if(j
< CM_FLCNT
&& CM_FLT_RFIXRATES
[j
] != 0) cpn_rate
= CM_FLT_RFIXRATES
[j
];
171 if(j
< CM_FLCNT
) cpn_rate
= CM_FLT_RFIXRATES
[j
];
174 if(bbit_calc_dr_d37__value()&& j
>= CM_FLCNT
&& sCalcType
== 1570) {
175 cpn_rate
= CM_PLIBOR
+ CM_QMRG
;
177 if(bbit_calc_dr_d36__value()){
178 double projected_rate
= pow((1 + CM_PLIBOR
/100.0),
179 (days_in_period
)) - 1;
181 projected_rate
= projected_rate
+ CM_QMRG
/100.0 * days_in_period
;
182 cpn_rate
= 100 * projected_rate
* (1/days_in_period
);
188 CM_FIFLX
[j
] = cpn_rate
/ sFreq
;
189 CM_FEXTX
[j
] = CM_FEXTX
[j
-1] + 1;
191 if(bbit_calc_dr_d46__value() && discDaytype
!= 0) {
192 CM_FEXTX
[j
] = (double)days_from_settle
/ (double)(1/sfreq1
);
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
);
204 CM_FIFLX
[j
] = cpn_rate
* days_in_period
;
205 CM_FEXTX
[j
] = (double)days_from_settle
/ (double)(1/sfreq1
);
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);
217 short accrued_days
= difday_(&sDayType
,CM_FLPRV
,asSettleDt
,&ercode
);
219 if(!bbit_calc_dr_d47__value()) {
221 *pdAI
= (CM_FLCPN
/ sFreq
)* accrued_days
/ ((double)days_in_current_period
);
224 *pdAI
= (CM_FLCPN
/ sFreq
)* accrued_days
/ ((double)1/sFreq
);
228 CM_EXDAY
= days_to_next_cpn
;
229 CM_BASIS
= days_in_current_period
;
230 datetrn_(CM_FLPRV
,CM_PREV
);