Arm 如何将uint8\u t*src加载到uint16x8\u t

Arm 如何将uint8\u t*src加载到uint16x8\u t,arm,neon,intrinsics,Arm,Neon,Intrinsics,如何将uint8\u t*src加载到uint16x8\u t? 例如,我们只能执行以下操作: uint8_t *src; ---> 似乎我不能使用vreinterpress_*()或(uint16x8_t)mysrc将mysrc转换为uint16x8_t?是否正确?将前8个值作为8位值加载: uint8x8_t mysrc8x8 = vld1_u8(src); 然后,通过在前8位中预加零,使用指令将这些值转换为16位值: uint16x8_t mysrc16x8 = vmovl_u8(my

如何将uint8\u t*src加载到uint16x8\u t? 例如,我们只能执行以下操作:

uint8_t *src;
--->


似乎我不能使用vreinterpress_*()或(uint16x8_t)mysrc将mysrc转换为uint16x8_t?是否正确?

将前8个值作为8位值加载:

uint8x8_t mysrc8x8 = vld1_u8(src);
然后,通过在前8位中预加零,使用指令将这些值转换为16位值:

uint16x8_t mysrc16x8 = vmovl_u8(mysrc8x8);
假设在对这些值进行一些操作后,以
uint16x8\t
格式获得输出
myout16x8
,并希望将其转换回
uint8x8\t
,则可以使用
vmovn\u u16
指令,请记住,如果值大于255,它确实会截断值:

uint8x8_t myoutput8x8 = vmovn_u16(myoutput16x8);

希望这有帮助

将前8个值作为8位值加载:

uint8x8_t mysrc8x8 = vld1_u8(src);
然后,通过在前8位中预加零,使用指令将这些值转换为16位值:

uint16x8_t mysrc16x8 = vmovl_u8(mysrc8x8);
假设在对这些值进行一些操作后,以
uint16x8\t
格式获得输出
myout16x8
,并希望将其转换回
uint8x8\t
,则可以使用
vmovn\u u16
指令,请记住,如果值大于255,它确实会截断值:

uint8x8_t myoutput8x8 = vmovn_u16(myoutput16x8);

希望这有帮助

将前8个值作为8位值加载:

uint8x8_t mysrc8x8 = vld1_u8(src);
然后,通过在前8位中预加零,使用指令将这些值转换为16位值:

uint16x8_t mysrc16x8 = vmovl_u8(mysrc8x8);
假设在对这些值进行一些操作后,以
uint16x8\t
格式获得输出
myout16x8
,并希望将其转换回
uint8x8\t
,则可以使用
vmovn\u u16
指令,请记住,如果值大于255,它确实会截断值:

uint8x8_t myoutput8x8 = vmovn_u16(myoutput16x8);

希望这有帮助

将前8个值作为8位值加载:

uint8x8_t mysrc8x8 = vld1_u8(src);
然后,通过在前8位中预加零,使用指令将这些值转换为16位值:

uint16x8_t mysrc16x8 = vmovl_u8(mysrc8x8);
假设在对这些值进行一些操作后,以
uint16x8\t
格式获得输出
myout16x8
,并希望将其转换回
uint8x8\t
,则可以使用
vmovn\u u16
指令,请记住,如果值大于255,它确实会截断值:

uint8x8_t myoutput8x8 = vmovn_u16(myoutput16x8);

希望这有帮助

vmovl的明确案例。如果你懂汇编的话,这真是件小事。除非你自己学习了这些指令,否则你不会在本质上走得很远。vmovl就是一个很好的例子。如果你懂汇编的话,这真是件小事。除非你自己学习了这些指令,否则你不会在本质上走得很远。vmovl就是一个很好的例子。如果你懂汇编的话,这真是件小事。除非你自己学习了这些指令,否则你不会在本质上走得很远。vmovl就是一个很好的例子。如果你懂汇编的话,这真是件小事。除非你自己学习了这些指令,否则你不会在本质上走得很远。