diff --git a/include/main.h b/include/main.h
index 008209c73a78928fc794c910dfe082c85f3e9c67..dfc04f7991a7c2f9241c10dca576c3648f53d43b 100644
--- a/include/main.h
+++ b/include/main.h
@@ -233,6 +233,7 @@ enum algo {
   _gemvHLIBPRO,
   _solveHLIBPRO,
   _gemvHCHAMELEON,
+  _gemmHCHAMELEON,
   _solveHCHAMELEON
 } ;
 
diff --git a/src/main.c b/src/main.c
index 2b34a2d48b77ec2603bd5d8349b852b3c23e16ab..490da5067cf9a81a2f210d9a2b7662c66436e4a3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -43,6 +43,10 @@ int main(int argc, char **argv) {
     testedAlgo = _solveHLIBPRO ;
     printf("Testing : solve HLIBPRO.\n") ;
   }
+  if (MpfArgHasName(&argc, argv, 1, "-gemmhchameleon") > 0) {
+    testedAlgo = _gemmHCHAMELEON ;
+    printf("Testing : gemm H-CHAMELEON.\n") ;
+  }
   if (MpfArgHasName(&argc, argv, 1, "-gemvhchameleon") > 0) {
     testedAlgo = _gemvHCHAMELEON ;
     printf("Testing : gemv H-CHAMELEON.\n") ;
@@ -66,6 +70,7 @@ int main(int argc, char **argv) {
     case _solveHLIBPRO:
       break;
     case _gemvHCHAMELEON:
+    case _gemmHCHAMELEON:
     case _solveHCHAMELEON: // Add "--chameleon" in the command line if it is not yet there
       if (!MpfArgHasName(&argc, argv, 0, "--chameleon")) argv[argc++]="--chameleon";
       break;
@@ -96,6 +101,7 @@ int main(int argc, char **argv) {
       ierr=initHLIBPRO(&argc, &argv) ; CHKERRQ(ierr) ;
       break;
     case _gemvHCHAMELEON:
+    case _gemmHCHAMELEON:
     case _solveHCHAMELEON:
       mpf_hmat_settings.engine = mpf_hmat_seq;
       ierr = init_hmat_interface(); CHKERRQ(ierr);
@@ -301,6 +307,7 @@ int main(int argc, char **argv) {
       ierr = testHLIBPRO(); CHKERRQ(ierr);
       break;
     case _gemvHCHAMELEON:
+    case _gemmHCHAMELEON:
     case _solveHCHAMELEON:
       ierr = testHCHAMELEON(); CHKERRQ(ierr);
       break;
diff --git a/src/testHCHAMELEON.c b/src/testHCHAMELEON.c
index 89c85ecd28481e8762a9ea1d79484cd575c78f26..2244ba770c5709ef0f086e3a2c9dca549316b646 100644
--- a/src/testHCHAMELEON.c
+++ b/src/testHCHAMELEON.c
@@ -110,6 +110,38 @@ int testHCHAMELEON(void) {
   /* Switch on the various H-CHAMELEON tests */
   /* ===================================================================================== */
   switch(testedAlgo) {
+    case _gemmHCHAMELEON:
+	{
+	    HCHAM_desc_t hdescB;
+	    HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescB, hi );
+	    HCHAM_desc_t hdescC;
+	    HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescC, hi );
+
+	    /* ===================================================================================== */
+	    /* Appelle le produit mat.vec : A.rhs -> solHMAT */
+	    /* ===================================================================================== */
+	    Mpf_printf(MPI_COMM_WORLD, "\n**** Computing HMATxHMAT product...\n") ;
+
+	    temps_initial = getTime ();
+
+	    /* Compute the mat.vec product A.rhs -> solCHAM */
+	    if ( generate_traces ) {
+		CHAMELEON_Enable( CHAMELEON_PROFILING_MODE );
+	    }
+	    CHAMELEON_gemm_Tile( hdescA.super, hdescB.super, hdescC.super );
+	    if ( generate_traces ) {
+		CHAMELEON_Disable( CHAMELEON_PROFILING_MODE );
+	    }
+
+	    temps_final = getTime ();
+	    temps_cpu = temps_final - temps_initial;
+	    Mpf_printf( MPI_COMM_WORLD,"<PERFTESTS> TpsCpuGEMM = %f \n", temps_cpu );
+
+	    HCHAMELEON_destroy_matrix( &hdescB );
+	    HCHAMELEON_destroy_matrix( &hdescC );
+	}
+	break;
+
     case _gemvHCHAMELEON:
 
       /* ===================================================================================== */