|
|
|
@ -3656,25 +3656,25 @@ private: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
Pack t = sf.t; |
|
|
|
|
Pack t2 = sf.t; |
|
|
|
|
if (pn_ == 4) { |
|
|
|
|
t = t.sub(0, pn_ * 2); |
|
|
|
|
t2 = t2.sub(0, pn_ * 2); |
|
|
|
|
} else if (pn_ == 6) { |
|
|
|
|
t.append(gp1); |
|
|
|
|
t.append(gp2); |
|
|
|
|
t2.append(gp1); |
|
|
|
|
t2.append(gp2); |
|
|
|
|
} |
|
|
|
|
assert((int)t.size() == pn_ * 2); |
|
|
|
|
assert((int)t2.size() == pn_ * 2); |
|
|
|
|
|
|
|
|
|
mov(gp0, ptr [z]); |
|
|
|
|
load_rm(t, gp0 + FpByte_ * 2); |
|
|
|
|
sub_rm(t, gp0); // d1 -= d0
|
|
|
|
|
sub_rm(t, (RegExp)d2); // d1 -= d2
|
|
|
|
|
store_mr(gp0 + FpByte_ * 2, t); |
|
|
|
|
load_rm(t2, gp0 + FpByte_ * 2); |
|
|
|
|
sub_rm(t2, gp0); // d1 -= d0
|
|
|
|
|
sub_rm(t2, (RegExp)d2); // d1 -= d2
|
|
|
|
|
store_mr(gp0 + FpByte_ * 2, t2); |
|
|
|
|
|
|
|
|
|
gen_raw_sub(gp0, gp0, d2, rax, pn_); |
|
|
|
|
const RegExp& d0H = gp0 + pn_ * 8; |
|
|
|
|
const RegExp& d2H = (RegExp)d2 + pn_ * 8; |
|
|
|
|
gen_raw_fp_sub(d0H, d0H, d2H, t, true); |
|
|
|
|
gen_raw_fp_sub(d0H, d0H, d2H, t2, true); |
|
|
|
|
} |
|
|
|
|
add(rsp, SS); |
|
|
|
|
ret(); |
|
|
|
|