以下技巧与经验是我们在编写HVX汇编代码时总结出来的,其实对于ARM/Intel 汇编也是通用的。
- 寄存器声明
- 结构体传参
- 寄存器复用
- 反汇编
- 寄存器值打印
寄存器声明
如下所示,通过对寄存器命名,可以大大提高代码的可读性,便于维护。
// conv1x1s1d32_v66_asm.S
#define vtcm_input r0
#define suma r1
#define weight_data r2
#define output_data r3
#define callback_data r5 // conv_callback_t defined in conv_opt.h
#define l2fetch_weight_para r23:22
#define quant_mul v0
#define fixed_0_5 v1
#define output_zeropoint v2
#define bias_val v3
结构体传参
当函数传参过多时,可以考虑将变量封装在一个结构体中,这样可以有效减少传参个数,同时也能够节约栈空间,如下所示,Hexagon NN的conv函数传参数量为17,而VCAP Hexagon只有7个:
(*conv)(input + info->in_depth*LPAD, //adjust for left integral pad
work->weigh