Hi community,
I have tried to compile the source code for openVGI have given proper cross compiler which is required by the platform still I am getting the error of unknown mnemonics for the instruction UQSUB8
Environment:
- Linux platform
- CROSS COMPILE tool chain = aarch64-linux-gcc
- ARMv8-a architecture
Code snippet:
for (i = 0; i < 256; ++i) { c = lut[i]; /* Extract alpha and clamp color components */ inva = 0x01010101 * ((~c) & 0xFF); c = _mali_osu_sataddu8(c, inva); cpu_ptr[i] = _mali_osu_satsubu8(c, inva); }
MALI_STATIC_INLINE u32 _mali_osu_satsubu8(u32 x, u32 y) { u32 retval; __asm__("UQSUB8 %0, %1, %2" : "=r"(retval) /* output */ : "r"(x), "r"(y) /* input */ ); return retval; }
Can you please suggest me how can I solve this issue?
Thanks,
DP
GCC uses 'w' for SIMD registers placeholders.
So the following asm inline :
__asm__("UQSUB %0.8b, %1.8b, %2.8b" : "=w"(retval) /* output */ : "w"(x), "w"(y) /* input */ );
Will compile to :
uqsub v0.8b, v0.8b, v1.8b
You can adapt this to your needs.
However, I do not guarantee that will output the same results as the UQSUB8 mnemonic, as I currently have no experience with NEON and no ARMv8 systems to test it on. I only have a cross-compilling GCC/AS toolset.
You'll have to write some tests to ensure this, using an ARMv7 system to generate a correct output listing and an ARMv8 system that will run the code and check if the results are identical.
That said, you should try GCC Godbolt, which is a website providing a quick look at the assembly output of sample C code.