patch 9.0.1542: line not fully displayed if it doesn't fit in the screen

Problem:    Line not fully displayed if it doesn't fit in the screen.
Solution:   Do not reset s_skipcol if not needed. (Luuk van Baal,
            closes #12376)
diff --git a/src/move.c b/src/move.c
index 3e5f6d5..8775607 100644
--- a/src/move.c
+++ b/src/move.c
@@ -2772,11 +2772,10 @@
     topline = loff.lnum;
 
     int want_height;
-    int smooth_scroll = FALSE;
-    if (curwin->w_p_sms && curwin->w_p_wrap)
+    int do_sms = curwin->w_p_wrap && curwin->w_p_sms;
+    if (do_sms)
     {
 	// 'smoothscroll' and 'wrap' are set
-	smooth_scroll = TRUE;
 	if (atend)
 	{
 	    want_height = (curwin->w_height - used) / 2;
@@ -2790,7 +2789,7 @@
     {
 	// If using smoothscroll, we can precisely scroll to the
 	// exact point where the cursor is halfway down the screen.
-	if (smooth_scroll)
+	if (do_sms)
 	{
 	    topline_back_winheight(&loff, FALSE);
 	    if (loff.height == MAXCOL)
@@ -2892,7 +2891,7 @@
 		curwin->w_skipcol = skipcol;
 		redraw_later(UPD_NOT_VALID);
 	    }
-	    else
+	    else if (do_sms)
 		reset_skipcol();
 	}
     }
diff --git a/src/testdir/dumps/Test_display_cursor_long_line.dump b/src/testdir/dumps/Test_display_cursor_long_line.dump
new file mode 100644
index 0000000..eafad8c
--- /dev/null
+++ b/src/testdir/dumps/Test_display_cursor_long_line.dump
@@ -0,0 +1,8 @@
+|<+0#4040ff13#ffffff0@2|b+0#0000000&@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| 
+|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
+@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| 
+|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
+@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| 
+|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
+@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4> 
+@57|2|,|6|0@1| @8|5|0|%| 
diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim
index 6acf4e3..5b08e84 100644
--- a/src/testdir/test_display.vim
+++ b/src/testdir/test_display.vim
@@ -489,4 +489,22 @@
   call StopVimInTerminal(buf)
 endfunc
 
+" Moving the cursor to a line that doesn't fit in the window should show
+" correctly.
+func Test_display_cursor_long_line()
+  CheckScreendump
+
+  let lines =<< trim END
+    call setline(1, ['a', 'bbbbb '->repeat(100), 'c'])
+    norm $j
+  END
+
+  call writefile(lines, 'XdispCursorLongline', 'D')
+  let buf = RunVimInTerminal('-S XdispCursorLongline', #{rows: 8})
+
+  call VerifyScreenDump(buf, 'Test_display_cursor_long_line', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index c917be5..4c70def 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1542,
+/**/
     1541,
 /**/
     1540,