mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
add target.isAArch64 to e2ir.d (#21074)
This commit is contained in:
parent
63152e453c
commit
f4da0efbd2
1 changed files with 17 additions and 16 deletions
|
@ -2016,9 +2016,10 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
elem* esiz1, esiz2; // Data size, to pass to memcmp
|
||||
const sz = telement.size(); // Size of one element
|
||||
|
||||
bool is64 = target.isX86_64 || target.isAArch64;
|
||||
if (t1.ty == Tarray)
|
||||
{
|
||||
elen1 = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, el_same(earr1));
|
||||
elen1 = el_una(is64 ? OP128_64 : OP64_32, TYsize_t, el_same(earr1));
|
||||
esiz1 = el_bin(OPmul, TYsize_t, el_same(elen1), el_long(TYsize_t, sz));
|
||||
eptr1 = array_toPtr(t1, el_same(earr1));
|
||||
}
|
||||
|
@ -2032,7 +2033,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
|
||||
if (t2.ty == Tarray)
|
||||
{
|
||||
elen2 = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, el_same(earr2));
|
||||
elen2 = el_una(is64 ? OP128_64 : OP64_32, TYsize_t, el_same(earr2));
|
||||
esiz2 = el_bin(OPmul, TYsize_t, el_same(elen2), el_long(TYsize_t, sz));
|
||||
eptr2 = array_toPtr(t2, el_same(earr2));
|
||||
}
|
||||
|
@ -2290,7 +2291,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
einit = resolveLengthVar(are.lengthVar, &n1, ta);
|
||||
enbytes = el_copytree(n1);
|
||||
n1 = array_toPtr(ta, n1);
|
||||
enbytes = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, enbytes);
|
||||
enbytes = el_una((target.isX86_64 || target.isAArch64) ? OP128_64 : OP64_32, TYsize_t, enbytes);
|
||||
}
|
||||
else if (ta.ty == Tpointer)
|
||||
{
|
||||
|
@ -2404,7 +2405,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
else
|
||||
{
|
||||
// It's not a constant, so pull it from the dynamic array
|
||||
return el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, el_copytree(ex));
|
||||
return el_una((target.isX86_64 || target.isAArch64) ? OP128_64 : OP64_32, TYsize_t, el_copytree(ex));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3751,7 +3752,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
elem* visitArrayLength(ArrayLengthExp ale)
|
||||
{
|
||||
elem* e = toElem(ale.e1, irs);
|
||||
e = el_una(target.isX86_64 ? OP128_64 : OP64_32, totym(ale.type), e);
|
||||
e = el_una((target.isX86_64 || target.isAArch64) ? OP128_64 : OP64_32, totym(ale.type), e);
|
||||
elem_setLoc(e, ale.loc);
|
||||
return e;
|
||||
}
|
||||
|
@ -3773,7 +3774,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
elem* e = toElem(dfpe.e1, irs);
|
||||
Type tb1 = dfpe.e1.type.toBasetype();
|
||||
e = addressElem(e, tb1);
|
||||
e = el_bin(OPadd, TYnptr, e, el_long(TYsize_t, target.isX86_64 ? 8 : 4));
|
||||
e = el_bin(OPadd, TYnptr, e, el_long(TYsize_t, (target.isX86_64 || target.isAArch64) ? 8 : 4));
|
||||
e = el_una(OPind, totym(dfpe.type), e);
|
||||
elem_setLoc(e, dfpe.loc);
|
||||
return e;
|
||||
|
@ -3833,7 +3834,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
{
|
||||
elen = e;
|
||||
e = el_same(elen);
|
||||
elen = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, elen);
|
||||
elen = el_una((target.isX86_64 || target.isAArch64) ? OP128_64 : OP64_32, TYsize_t, elen);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3993,7 +3994,7 @@ elem* toElem(Expression e, ref IRState irs)
|
|||
{
|
||||
elength = n1;
|
||||
n1 = el_same(elength);
|
||||
elength = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, elength);
|
||||
elength = el_una((target.isX86_64 || target.isAArch64) ? OP128_64 : OP64_32, TYsize_t, elength);
|
||||
L1:
|
||||
elem* n2x = n2;
|
||||
n2 = el_same(n2x);
|
||||
|
@ -4550,7 +4551,7 @@ elem* toElemCast(CastExp ce, elem* e, bool isLvalue, ref IRState irs)
|
|||
else
|
||||
{
|
||||
// e1 . (uint)(e1 >> 32)
|
||||
if (target.isX86_64)
|
||||
if (target.isX86_64 || target.isAArch64)
|
||||
{
|
||||
e = el_bin(OPshr, TYucent, e, el_long(TYint, 64));
|
||||
e = el_una(OP128_64, totym(t), e);
|
||||
|
@ -4594,7 +4595,7 @@ elem* toElemCast(CastExp ce, elem* e, bool isLvalue, ref IRState irs)
|
|||
elem* es = el_same(e);
|
||||
|
||||
elem* eptr = el_una(OPmsw, TYnptr, es);
|
||||
elem* elen = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYsize_t, e);
|
||||
elem* elen = el_una(target.isX86_64 || target.isAArch64 ? OP128_64 : OP64_32, TYsize_t, e);
|
||||
elem* elen2 = el_bin(OPmul, TYsize_t, elen, el_long(TYsize_t, fsize / tsize));
|
||||
e = el_pair(totym(ce.type), elen2, eptr);
|
||||
}
|
||||
|
@ -4758,7 +4759,7 @@ elem* toElemCast(CastExp ce, elem* e, bool isLvalue, ref IRState irs)
|
|||
case Tpointer:
|
||||
if (fty == Tdelegate)
|
||||
return Lpaint(ce, e, ttym);
|
||||
tty = target.isX86_64 ? Tuns64 : Tuns32;
|
||||
tty = target.isX86_64 || target.isAArch64 ? Tuns64 : Tuns32;
|
||||
break;
|
||||
|
||||
case Tchar: tty = Tuns8; break;
|
||||
|
@ -4783,7 +4784,7 @@ elem* toElemCast(CastExp ce, elem* e, bool isLvalue, ref IRState irs)
|
|||
// typeof(null) is same with void* in binary level.
|
||||
return Lzero(ce, e, ttym);
|
||||
}
|
||||
case Tpointer: fty = target.isX86_64 ? Tuns64 : Tuns32; break;
|
||||
case Tpointer: fty = (target.isX86_64 || target.isAArch64) ? Tuns64 : Tuns32; break;
|
||||
case Tchar: fty = Tuns8; break;
|
||||
case Twchar: fty = Tuns16; break;
|
||||
case Tdchar: fty = Tuns32; break;
|
||||
|
@ -5459,7 +5460,7 @@ elem* callfunc(Loc loc,
|
|||
assert(tf);
|
||||
ethis = ec;
|
||||
ec = el_same(ethis);
|
||||
ethis = el_una(target.isX86_64 ? OP128_64 : OP64_32, TYnptr, ethis); // get this
|
||||
ethis = el_una(target.isX86_64 || target.isAArch64 ? OP128_64 : OP64_32, TYnptr, ethis); // get this
|
||||
ec = array_toPtr(t, ec); // get funcptr
|
||||
tym_t tym;
|
||||
/* Delegates use the same calling convention as member functions.
|
||||
|
@ -6328,7 +6329,7 @@ Lagain:
|
|||
case 2: r = RTLSYM.MEMSET16; break;
|
||||
case 4: r = RTLSYM.MEMSET32; break;
|
||||
case 8: r = RTLSYM.MEMSET64; break;
|
||||
case 16: r = target.isX86_64 ? RTLSYM.MEMSET128ii : RTLSYM.MEMSET128; break;
|
||||
case 16: r = (target.isX86_64 || target.isAArch64) ? RTLSYM.MEMSET128ii : RTLSYM.MEMSET128; break;
|
||||
default: r = RTLSYM.MEMSETN; break;
|
||||
}
|
||||
|
||||
|
@ -6345,7 +6346,7 @@ Lagain:
|
|||
}
|
||||
}
|
||||
|
||||
if (target.isX86_64 && tybasic(evalue.Ety) == TYstruct && r != RTLSYM.MEMSETN)
|
||||
if ((target.isX86_64 || target.isAArch64) && tybasic(evalue.Ety) == TYstruct && r != RTLSYM.MEMSETN)
|
||||
{
|
||||
/* If this struct is in-memory only, i.e. cannot necessarily be passed as
|
||||
* a gp register parameter.
|
||||
|
@ -6388,7 +6389,7 @@ Lagain:
|
|||
edim = el_bin(OPmul, TYsize_t, edim, el_long(TYsize_t, sz));
|
||||
}
|
||||
|
||||
if (irs.target.os == Target.OS.Windows && irs.target.isX86_64 && sz > registerSize)
|
||||
if (irs.target.os == Target.OS.Windows && (irs.target.isX86_64 || irs.target.isAArch64) && sz > registerSize)
|
||||
{
|
||||
evalue = addressElem(evalue, tb);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue