Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.
We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.
Thank you for your understanding.
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.