Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to access full 128 bits in NEON instructions?

I recently wrote a program that does some floating point calculations in Arm64 Assembly.
Since the numbers I’m dealing with can become really tiny, I now want to optimise the code so that it uses as much precision as possible.

I found out the NEON engine has 128-bit floating point registers instead of the 64 bits I’m currently working with, so I searched a way to use these for calculations. Every website I looked at tells me this should be possible, but when I try to do something like

fmul v0, v1, v2

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I just get "error: invalid operand for instruction".

I’m using the M1 chip that should be capable of working with NEON instructions, and when I change it to

fmul v0.2d, v1.2d, v2.2d

there’s no problem at all.

Does anyone have an idea what I’m doing wrong? Or is it just impossible to use all the 128 bits of these registers at once?

>Solution :

You can’t.

True, the NEON registers are 128bit wide, but the maximum data type width is 64.

No consumer architecture known to me is capable of handling any 128bit data type.

PS : Is there a quad data type to begin with? I’m curious.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading