From 5b58a8841c291a7d3e284fb38a1c03973269409b Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Wed, 27 Nov 2024 14:21:35 +0100 Subject: [PATCH] Fix default functions when providing an allocated matrix when creating the descriptor --- control/descriptor.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/control/descriptor.c b/control/descriptor.c index 22ddfd71e..ff2732b2c 100644 --- a/control/descriptor.c +++ b/control/descriptor.c @@ -222,10 +222,36 @@ int chameleon_desc_init_internal( CHAM_desc_t *desc, const char *name, void *mat /* If one of the function get_* is NULL, we switch back to the default */ desc->get_blktile = chameleon_desc_gettile; - desc->get_blkaddr = get_blkaddr ? get_blkaddr : chameleon_getaddr_ccrb; - desc->get_blkldd = get_blkldd ? get_blkldd : chameleon_getblkldd_ccrb; - desc->get_rankof = chameleon_getrankof_tile; - desc->get_rankof_init = get_rankof ? get_rankof : chameleon_getrankof_2d; + + /* Data addresses */ + if ( get_blkaddr ) { + desc->get_blkaddr = get_blkaddr; + } + else { + if ( (intptr_t)mat > 0 ) { + desc->get_blkaddr = chameleon_getaddr_cm; + } + else { + desc->get_blkaddr = chameleon_getaddr_ccrb; + } + } + + /* Data leading dimensions */ + if ( get_blkldd ) { + desc->get_blkldd = get_blkldd; + } + else { + if ( (intptr_t)mat > 0 ) { + desc->get_blkldd = chameleon_getblkldd_cm; + } + else { + desc->get_blkldd = chameleon_getblkldd_ccrb; + } + } + + /* Data distribution */ + desc->get_rankof = chameleon_getrankof_tile; + desc->get_rankof_init = get_rankof ? get_rankof : chameleon_getrankof_2d; desc->get_rankof_init_arg = get_rankof_arg; /* Matrix properties */ -- GitLab