FYI the testcase I'm using to test the patch. Some of the functions get smaller, some of them get bigger, and some don't change in size but should when compiled for an rv64 target.
Jim
void store1z (int *array) { array[200] = 0; array[201] = 0; array[202] = 0; array[203] = 0; } void store2z (long long *array) { array[200] = 0; array[201] = 0; array[202] = 0; array[203] = 0; } void store1a (int *array, int a) { array[200] = a; array[201] = a; array[202] = a; array[203] = a; } void store2a (long long *array, long long a) { array[200] = a; array[201] = a; array[202] = a; array[203] = a; } int load1r (int *array) { int a = 0; a += array[200]; a += array[201]; a += array[202]; a += array[203]; return a; } long long load2r (long long *array) { int a = 0; a += array[200]; a += array[201]; a += array[202]; a += array[203]; return a; } extern int sub1 (int, int, int, int, int, int, int); int load1a (int a0, int a1, int a2, int a3, int a4, int *array) { int a = 0; a += array[200]; a += array[201]; a += array[202]; a += array[203]; return sub1 (a0, a1, a2, a3, a4, 0, a); } extern long long sub2 (long long, long long, long long, long long, long long, long long, long long); long long load2a (long long a0, long long a1, long long a2, long long a3, long long a4, long long *array) { int a = 0; a += array[200]; a += array[201]; a += array[202]; a += array[203]; return sub2 (a0, a1, a2, a3, a4, 0, a); }