patch 8.2.3903: "gM" does not count tabs as expected

Problem:    "gM" does not count tabs as expected.
Solution:   Use linetabsize() instead of mb_string2cells(). (closes #9409)
diff --git a/src/normal.c b/src/normal.c
index 1e887ca..f925aa1 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -6122,14 +6122,9 @@
 
     case 'M':
 	{
-	    char_u  *ptr = ml_get_curline();
-
 	    oap->motion_type = MCHAR;
 	    oap->inclusive = FALSE;
-	    if (has_mbyte)
-		i = mb_string2cells(ptr, (int)STRLEN(ptr));
-	    else
-		i = (int)STRLEN(ptr);
+	    i = linetabsize(ml_get_curline());
 	    if (cap->count0 > 0 && cap->count0 <= 100)
 		coladvance((colnr_T)(i * cap->count0 / 100));
 	    else
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index 6458a1b..9794961 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -2580,7 +2580,15 @@
   call assert_equal(87, col('.'))
   call assert_equal('E', getreg(0))
 
+  " Test for gM with Tab characters
+  call setline('.', "\ta\tb\tc\td\te\tf")
+  norm! gMyl
+  call assert_equal(6, col('.'))
+  call assert_equal("c", getreg(0))
+
   " Test for g Ctrl-G
+  call setline('.', lineC)
+  norm! 60gMyl
   set ff=unix
   let a=execute(":norm! g\<c-g>")
   call assert_match('Col 87 of 144; Line 2 of 2; Word 1 of 1; Byte 88 of 146', a)
diff --git a/src/version.c b/src/version.c
index 55ddb06..7d5d6b5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3903,
+/**/
     3902,
 /**/
     3901,