@@ -819,9 +819,17 @@ linearize_@TYPE@_matrix(void *dst_in,
819
819
(fortran_int )(data -> column_strides /sizeof (@typ @));
820
820
fortran_int one = 1 ;
821
821
for (i = 0 ; i < data -> rows ; i ++ ) {
822
- FNAME (@copy @)(& columns ,
823
- (void * )src , & column_strides ,
824
- (void * )dst , & one );
822
+ if (column_strides >= 0 ) {
823
+ FNAME (@copy @)(& columns ,
824
+ (void * )src , & column_strides ,
825
+ (void * )dst , & one );
826
+ }
827
+ else {
828
+ FNAME (@copy @)(& columns ,
829
+ (void * )((@typ @* )src + (columns - 1 )* column_strides ),
830
+ & column_strides ,
831
+ (void * )dst , & one );
832
+ }
825
833
src += data -> row_strides /sizeof (@typ @);
826
834
dst += data -> columns ;
827
835
}
@@ -847,9 +855,17 @@ delinearize_@TYPE@_matrix(void *dst_in,
847
855
(fortran_int )(data -> column_strides /sizeof (@typ @));
848
856
fortran_int one = 1 ;
849
857
for (i = 0 ; i < data -> rows ; i ++ ) {
850
- FNAME (@copy @)(& columns ,
851
- (void * )src , & one ,
852
- (void * )dst , & column_strides );
858
+ if (column_strides >= 0 ) {
859
+ FNAME (@copy @)(& columns ,
860
+ (void * )src , & one ,
861
+ (void * )dst , & column_strides );
862
+ }
863
+ else {
864
+ FNAME (@copy @)(& columns ,
865
+ (void * )src , & one ,
866
+ (void * )((@typ @* )dst + (columns - 1 )* column_strides ),
867
+ & column_strides );
868
+ }
853
869
src += data -> columns ;
854
870
dst += data -> row_strides /sizeof (@typ @);
855
871
}
0 commit comments