qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit c5aca682a20d8cf55c345b7e07be51230693fd84
parent d6c9669c3c83ce9f570a9c3528110b666aba88f2
Author: Quentin Carbonneaux <quentin@c9x.me>
Date:   Mon, 28 Aug 2023 22:45:41 +0200

comments in amd64 isel

Diffstat:
Mamd64/isel.c | 30+++++++++++++++++++++---------
1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/amd64/isel.c b/amd64/isel.c @@ -316,15 +316,15 @@ sel(Ins i, ANum *an, Fn *fn) break; case Oultof: /* %mask =l and %arg.0, 1 - %isbig =l shr %arg.0, 63 - %divided =l shr %arg.0, %isbig - %or =l or %mask, %divided - %float =d sltof %or - %cast =l cast %float - %addend =l shl %isbig, 52 - %sum =l add %cast, %addend - %result =d cast %sum - */ + * %isbig =l shr %arg.0, 63 + * %divided =l shr %arg.0, %isbig + * %or =l or %mask, %divided + * %float =d sltof %or + * %cast =l cast %float + * %addend =l shl %isbig, 52 + * %sum =l add %cast, %addend + * %result =d cast %sum + */ r0 = newtmp("utof", k, fn); if (k == Ks) kc = Kw, sh = 23; @@ -364,6 +364,18 @@ sel(Ins i, ANum *an, Fn *fn) i.to = r0; goto Emit; } + /* %try0 =l {s,d}tosi %fp + * %mask =l sar %try0, 63 + * + * mask is all ones if the first + * try was oob, all zeroes o.w. + * + * %fps ={s,d} sub %fp, (1<<63) + * %try1 =l {s,d}tosi %fps + * + * %tmp =l and %mask, %try1 + * %res =l or %tmp, %try0 + */ r0 = newtmp("ftou", kc, fn); for (j=0; j<4; j++) tmp[j] = newtmp("ftou", Kl, fn);