[PATCHSET][ARM64] Implement big endian NEON
Tim Northover
t.p.northover at gmail.com
Fri May 2 08:46:51 PDT 2014
Hi James,
>From 0001:
+ uint32_t OpSize = Flags.isByVal() ? Flags.getByValSize()*8 :
+ VA.getLocVT().getSizeInBits();
+ OpSize = (OpSize + 7) / 8;
+
+ // FIXME: This works on big-endian for composite byvals, which
are the common
+ // case. It should also work for fundamental types too.
+ uint32_t BEAlign = 0;
+ if (OpSize < 8 && !Subtarget->isLittleEndian() && !Flags.isByVal())
Since OpSize is only ever used when !isByVal, this could probably be
simplified, possibly to "if (!Subtarget->isLittleEndian() &&
!Flags.isByVal() && VA.getLocVT().getSizeInBits() < 64" (well,
strictly, <= 56, but I'm unconvinced that there's an actual difference
or that 56 is more correct if there *is*).
>From 0003:
+def : Pat<(v1i64 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS
GPR64:$Xn, FPR64)>; // b)
Is that comment (etc) meaningful?
+def : Pat<(f128 (bitconvert (v4i32 FPR128:$src))), (f128 (EXTv16i8
(REV64v4i32 FPR128:$src), (REV64v4i32 FPR128:$src), (i32 8)))>;
I think the long .td lines should probably be split now.
I'd also suggest squashing 0003, 0004 & 0005 into a single commit.
Other than that, it's looking good I think.
Cheers.
Tim.
More information about the llvm-commits
mailing list