36
36
{bs_put_string, String, SizeInBytes} ->
37
37
Tmp1 = hipe_rtl:mk_new_reg(),
38
38
Tmp2 = hipe_rtl:mk_new_reg(),
40
hipe_consttab:insert_block(ConstTab, 4, byte, String),
40
hipe_consttab:insert_block(ConstTab, byte, String),
42
42
{[hipe_rtl:mk_load_address(Tmp1, Label, constant),
43
43
hipe_rtl:mk_move(Tmp2, hipe_rtl:mk_imm(SizeInBytes)),
52
[hipe_rtl:mk_call([], bs_init, [], c, TrueLblName, [])];
51
{bs_init, _Size, _Flags} ->
52
[hipe_rtl:mk_call([], bs_init, [], TrueLblName, [], not_remote)];
54
54
gen_test_sideffect_bs_call(bs_start_match,
55
55
Args, TrueLblName, FalseLblName);
72
72
TrueLblName,FalseLblName)
76
76
{bs_put_float, Size, Flags, ConstInfo} ->
77
77
SizeReg = hipe_rtl:mk_new_reg(),
78
78
FlagsReg = hipe_rtl:mk_new_reg(),
81
[hipe_rtl:mk_goto(FalseLblName)];
87
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
88
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
89
hipe_rtl:mk_call([],bs_put_float,
90
[Src, SizeReg, FlagsReg], c,
93
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
94
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
95
gen_test_sideffect_bs_call(bs_put_float,
83
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
84
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
85
hipe_rtl:mk_call([],bs_put_float,
86
[Src, SizeReg, FlagsReg],
87
TrueLblName,[],not_remote)];
89
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
90
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
91
gen_test_sideffect_bs_call(bs_put_float,
92
[Src,SizeReg,FlagsReg],
93
TrueLblName,FalseLblName)];
95
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
96
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
97
gen_test_sideffect_bs_call(bs_put_float,
98
[Src,SizeReg,FlagsReg],
99
TrueLblName,FalseLblName)]
102
[gen_make_size(SizeReg, Size, Bits, FalseLblName),
103
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
104
gen_test_sideffect_bs_call( bs_put_float,
96
105
[Src,SizeReg,FlagsReg],
97
106
TrueLblName,FalseLblName)]
100
[gen_make_size(SizeReg, Size, Bits, FalseLblName),
101
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
102
gen_test_sideffect_bs_call( bs_put_float,
103
[Src,SizeReg,FlagsReg],
104
TrueLblName,FalseLblName)]
110
109
{bs_put_integer, Size, Flags, ConstInfo} ->
111
110
SizeReg = hipe_rtl:mk_new_reg(),
112
111
FlagsReg = hipe_rtl:mk_new_reg(),
121
120
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
122
121
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
123
122
hipe_rtl:mk_call([],bs_put_integer,
124
[Src, SizeReg, FlagsReg], c,
123
[Src, SizeReg, FlagsReg],
124
TrueLblName,[],not_remote)];
127
126
[hipe_rtl:mk_move(SizeReg, hipe_rtl:mk_imm(Size)),
128
127
hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
144
141
{bs_skip_bits_all, Flags} ->
145
142
case (Flags band ?BSF_ALIGNED) of
146
143
1 -> %% This can't fail.
147
[hipe_rtl:mk_call([], bs_skip_bits_all, [], c,
144
[hipe_rtl:mk_call([], bs_skip_bits_all, [],
145
TrueLblName,[],not_remote)];
150
147
gen_test_sideffect_bs_call(bs_skip_bits_all,
245
240
{bs_restore, Index} ->
246
241
Tmp1 = hipe_rtl:mk_new_reg(),
247
242
[hipe_rtl:mk_move(Tmp1, hipe_rtl:mk_imm(Index)),
248
hipe_rtl:mk_call([],bs_restore,[Tmp1],c, TrueLblName,[])];
243
hipe_rtl:mk_call([],bs_restore,[Tmp1],TrueLblName,[],not_remote)];
250
245
{bs_save, Index} ->
251
246
Tmp1 = hipe_rtl:mk_new_reg(),
252
247
[hipe_rtl:mk_move(Tmp1, hipe_rtl:mk_imm(Index)),
253
hipe_rtl:mk_call([],bs_save,[Tmp1],c, TrueLblName,[])];
248
hipe_rtl:mk_call([],bs_save,[Tmp1],TrueLblName,[],not_remote)];
257
251
[hipe_rtl_arch:call_bif(Dst, bs_final, [],
288
277
Tmp1 = hipe_rtl:mk_new_reg(),
289
278
RetLabel = hipe_rtl:mk_new_label(),
291
[hipe_rtl:mk_call([Tmp1], Name, Args, c,
292
hipe_rtl:label_name(RetLabel),[]),
280
[hipe_rtl:mk_call([Tmp1], Name, Args,
281
hipe_rtl:label_name(RetLabel),[],not_remote),
294
283
hipe_rtl:mk_branch(Tmp1, eq, hipe_rtl:mk_imm(0),
295
284
FalseLblName, TrueLblName, 0.01)].
305
294
ZeroConst = hipe_rtl:mk_imm(hipe_tagscheme:mk_fixnum(0)),
306
295
UnitConst = hipe_rtl:mk_imm(hipe_tagscheme:mk_fixnum(UnitImm)),
307
296
[hipe_rtl:mk_move(UnitVar, UnitConst),
308
hipe_rtl:mk_call([TmpVar], '*', [BitsVar, UnitVar], c,
297
hipe_rtl:mk_call([TmpVar], '*', [BitsVar, UnitVar],
309
298
hipe_rtl:label_name(MulDoneLabel),
299
FalseLblName, not_remote),
312
301
hipe_tagscheme:test_fixnum(TmpVar, hipe_rtl:label_name(MulOkLabel),
313
302
FalseLblName, 0.99),