diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 2e578e2b0d7..b854c08908c 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -5454,6 +5454,9 @@ x86_ginsn_addsub_reg_mem (const symbolS *insn_end_sym)
   if (i.mem_operands)
     return ginsn;
 
+  /* Skip detection of 8/16/32-bit op size; 'add/sub reg, reg/mem' ops always
+     make the dest reg untraceable for SCFI.  */
+
   /* op reg, reg/mem.  */
   src1_dw2_regnum = ginsn_dw2_regnum (i.op[0].regs);
   /* Of interest only when second opnd is not memory.  */
@@ -5492,6 +5495,9 @@ x86_ginsn_addsub_mem_reg (const symbolS *insn_end_sym)
   if (i.mem_operands && !i.base_reg && !i.index_reg)
     return ginsn;
 
+  /* Skip detection of 8/16/32-bit op size; 'add/sub reg/mem, reg' ops always
+     make the dest reg untraceable for SCFI.  */
+
   /* op reg/mem, %reg.  */
   dw2_regnum = ginsn_dw2_regnum (i.op[1].regs);
 
@@ -5572,6 +5578,11 @@ x86_ginsn_alu_imm (const symbolS *insn_end_sym)
   if (i.mem_operands == 1)
     return ginsn;
 
+  /* 8/16/32-bit op size makes the destination reg untraceable for SCFI.
+     Deal with this via the x86_ginsn_unhandled () code path.  */
+  if (i.suffix != QWORD_MNEM_SUFFIX)
+    return ginsn;
+
   gas_assert (i.imm_operands == 1);
   src_imm = i.op[0].imms->X_add_number;
   /* The second operand may be a register or indirect access.  For SCFI, only
@@ -5618,6 +5629,12 @@ x86_ginsn_move (const symbolS *insn_end_sym)
   if (i.mem_operands == 1 && !i.base_reg && !i.index_reg)
     return ginsn;
 
+  /* 8/16/32-bit op size makes the destination reg untraceable for SCFI.
+     Handle mov reg, reg only.  mov to or from a memory operand will make
+     dest reg, when present, untraceable, irrespective of the op size.  */
+  if (i.reg_operands == 2 && i.suffix != QWORD_MNEM_SUFFIX)
+    return ginsn;
+
   gas_assert (i.tm.opcode_space == SPACE_BASE);
   if (opcode == 0x8b || opcode == 0x8a)
     {
@@ -6014,6 +6031,12 @@ x86_ginsn_new (const symbolS *insn_end_sym, enum ginsn_gen_mode gmode)
 
   switch (opcode)
     {
+
+    /* Add opcodes 0x0/0x2 and sub opcodes 0x28/0x2a (with opcode_space
+       SPACE_BASE) are 8-bit ops.  While they are relevant for SCFI
+       correctness,  skip handling them here and use the x86_ginsn_unhandled
+       code path to generate GINSN_TYPE_OTHER when necessary.  */
+
     case 0x1:  /* add reg, reg/mem.  */
     case 0x29: /* sub reg, reg/mem.  */
       if (i.tm.opcode_space != SPACE_BASE)
diff --git a/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.l b/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.l
index ff078d4d883..5190e45699d 100644
--- a/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.l
+++ b/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.l
@@ -12,38 +12,42 @@ GAS LISTING .*
    7 0000 54       		push %rsp
    7              	ginsn: SUB %r7, 8, %r7
    7              	ginsn: STORE %r7, \[%r7\+0\]
-   8 0001 4889E5   		movq %rsp, %rbp
-   8              	ginsn: MOV %r7, %r6
-   9              	
-  10 0004 48010425 		addq %rax, symbol
-  10      00000000 
-  11 000c 03042500 		add symbol, %eax
-  11      000000
-  12 0013 670320   		add \(%eax\), %esp
-  12              	ginsn: ADD \[%r0\+0\], %r7, %r7
-  13 0016 67012405 		add %esp, \(,%eax\)
-  13      00000000 
-  14 001e 67032405 		add \(,%eax\), %esp
+   8 0001 01C5     		add %eax, %ebp
+   8              	ginsn: ADD %r0, %r6, %r6
+   9 0003 4889E5   		movq %rsp, %rbp
+   9              	ginsn: MOV %r7, %r6
+  10              	
+  11 0006 48010425 		addq %rax, symbol
+  11      00000000 
+  12 000e 03042500 		add symbol, %eax
+  12      000000
+  13 0015 670320   		add \(%eax\), %esp
+  13              	ginsn: ADD \[%r0\+0\], %r7, %r7
+  14 0018 67012405 		add %esp, \(,%eax\)
   14      00000000 
-  14              	ginsn: ADD \[%r0\+0\], %r7, %r7
-  15              	
-  16 0026 4801C3   		addq %rax, %rbx
-  16              	ginsn: ADD %r0, %r3, %r3
-  17 0029 01C3     		add %eax, %ebx
+  15 0020 67032405 		add \(,%eax\), %esp
+  15      00000000 
+  15              	ginsn: ADD \[%r0\+0\], %r7, %r7
+  16              	
+  17 0028 4801C3   		addq %rax, %rbx
   17              	ginsn: ADD %r0, %r3, %r3
-  18              	
-  19 002b 4883D408 		adc \$8, %rsp
+  18 002b 01C3     		add %eax, %ebx
+  18              	ginsn: ADD %r0, %r3, %r3
+  19 002d 83C408   		add \$8, %esp
   19              	ginsn: OTH 0, 0, %r7
   20              	
-  21 002f 488345F0 		addq \$1, -16\(%rbp\)
-  21      01
+  21 0030 4883D408 		adc \$8, %rsp
+  21              	ginsn: OTH 0, 0, %r7
   22              	
-  23 0034 4803D8   		\{load\} addq %rax, %rbx
-  23              	ginsn: ADD %r0, %r3, %r3
+  23 0034 488345F0 		addq \$1, -16\(%rbp\)
+  23      01
   24              	
-  25 0037 C3       		ret
-  25              	ginsn: RET
-  26              	.LFE0:
-  26              	ginsn: SYM .LFE0
-  27              		.size foo, .-foo
-  27              	ginsn: SYM FUNC_END
+  25 0039 4803D8   		{load} addq %rax, %rbx
+  25              	ginsn: ADD %r0, %r3, %r3
+  26              	
+  27 003c C3       		ret
+  27              	ginsn: RET
+  28              	.LFE0:
+  28              	ginsn: SYM .LFE0
+  29              		.size foo, .-foo
+  29              	ginsn: SYM FUNC_END
diff --git a/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.s b/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.s
index f9398369531..f6bf5a0a5b8 100644
--- a/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.s
+++ b/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.s
@@ -5,6 +5,7 @@
 	.type foo, @function
 foo:
 	push %rsp
+	add %eax, %ebp
 	movq %rsp, %rbp
 
 	addq %rax, symbol
@@ -15,6 +16,7 @@ foo:
 
 	addq %rax, %rbx
 	add %eax, %ebx
+	add $8, %esp
 
 	adc $8, %rsp
 
diff --git a/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.l b/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.l
index f242e1f2171..8a8edd5742d 100644
--- a/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.l
+++ b/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.l
@@ -1,69 +1,85 @@
 GAS LISTING .*
 
 
-.*# Testcase for DWARF regnum ginsn API
+   1              	# Testcase for DWARF regnum ginsn API
    2              		.text
    3              		.globl  foo
    4              		.type   foo, @function
    4              	ginsn: SYM FUNC_BEGIN
    5              	foo:
    5              	ginsn: SYM foo
-   6 0000 0408     		add    \$8, %al
-   7 0002 80C108   		add    \$8, %cl
-   7              	ginsn: ADD %r2, 8, %r2
-   8 0005 80C208   		add    \$8, %dl
-   8              	ginsn: ADD %r1, 8, %r1
-   9 0008 80C408   		add    \$8, %ah
-   9              	ginsn: ADD %r0, 8, %r0
-  10 000b 80C508   		add    \$8, %ch
-  10              	ginsn: ADD %r2, 8, %r2
-  11 000e 80C608   		add    \$8, %dh
-  11              	ginsn: ADD %r1, 8, %r1
-  12 0011 80C708   		add    \$8, %bh
-  12              	ginsn: ADD %r3, 8, %r3
-  13              	
-  14 0014 4080C008 		add    \$8, %axl
-  14              	ginsn: ADD %r0, 8, %r0
-  15 0018 4080C408 		add    \$8, %spl
-  15              	ginsn: ADD %r7, 8, %r7
+   6 0000 55       		push   %rbp
+   6              	ginsn: SUB %r7, 8, %r7
+   6              	ginsn: STORE %r6, \[%r7\+0\]
+   7 0001 4889E5   		mov    %rsp, %rbp
+   7              	ginsn: MOV %r7, %r6
+   8              	
+   9 0004 8A40FE   		mov    -0x2\(%rax\), %al
+   9              	ginsn: MOV \[%r0\+-2\], %r0
+  10 0007 8A58FE   		mov    -0x2\(%rax\), %bl
+  10              	ginsn: MOV \[%r0\+-2\], %r3
+  11 000a 8A50FE   		mov    -0x2\(%rax\), %dl
+  11              	ginsn: MOV \[%r0\+-2\], %r1
+  12 000d 8A60FE   		mov    -0x2\(%rax\), %ah
+  12              	ginsn: MOV \[%r0\+-2\], %r0
+  13 0010 8A68FE   		mov    -0x2\(%rax\), %ch
+  13              	ginsn: MOV \[%r0\+-2\], %r2
+  14 0013 8A70FE   		mov    -0x2\(%rax\), %dh
+  14              	ginsn: MOV \[%r0\+-2\], %r1
+  15 0016 8A78FE   		mov    -0x2\(%rax\), %bh
+  15              	ginsn: MOV \[%r0\+-2\], %r3
   16              	
-  17 001c 6683C008 		add    \$8, %ax
-  17              	ginsn: ADD %r0, 8, %r0
-  18 0020 664183C0 		add    \$8, %r8w
-  18      08
-  18              	ginsn: ADD %r8, 8, %r8
-  19 0025 6683C408 		add    \$8, %sp
-  19              	ginsn: ADD %r7, 8, %r7
-  20              	
-  21 0029 83C008   		add    \$8, %eax
-  21              	ginsn: ADD %r0, 8, %r0
-  22 002c 4183C008 		add    \$8, %r8d
-  22              	ginsn: ADD %r8, 8, %r8
-  23 0030 81C40040 		add    \$16384, %esp
-  23      0000
-  23              	ginsn: ADD %r7, 16384, %r7
-  24              	
-  25 0036 4883C508 		add    \$8, %rbp
-  25              	ginsn: ADD %r6, 8, %r6
-  26              	
-  27 003a 488D05FE 		lea    -0x2\(%rip\), %rax
-  27      FFFFFF
-  27              	ginsn: ADD %r4, -2, %r0
-  28 0041 67488905 		mov    %rax, 0x2\(%eip\)
-  28      02000000 
-  28              	ginsn: MOV %r0, \[%r4\+2\]
-  29 0049 67488B05 		mov    -0x2\(%eip\), %rax
-  29      FEFFFFFF 
-  29              	ginsn: MOV \[%r4\+-2\], %r0
+  17 0019 408A40FE 		mov    -0x2\(%rax\), %axl
+  17              	ginsn: MOV \[%r0\+-2\], %r0
+  18 001d 408A60FE 		mov    -0x2\(%rax\), %spl
+  18              	ginsn: MOV \[%r0\+-2\], %r7
+  19              	
+  20 0021 668B40FE 		mov    -0x2\(%rax\), %ax
+  20              	ginsn: MOV \[%r0\+-2\], %r0
+  21 0025 66448B40 		mov    -0x2\(%rax\), %r8w
+  21      FE
+  21              	ginsn: MOV \[%r0\+-2\], %r8
+  22 002a 668B60FE 		mov    -0x2\(%rax\), %sp
+  22              	ginsn: MOV \[%r0\+-2\], %r7
+  23              	
+  24 002e 4080C408 		add    \$8, %spl
+  24              	ginsn: OTH 0, 0, %r7
+  25              	
+  26 0032 8B40FE   		mov    -0x2\(%rax\), %eax
+  26              	ginsn: MOV \[%r0\+-2\], %r0
+  27 0035 448B40FE 		mov    -0x2\(%rax\), %r8d
+  27              	ginsn: MOV \[%r0\+-2\], %r8
+  28              	
+  29 0039 81C40040 		add    \$16384, %esp
+  29      0000
+  29              	ginsn: OTH 0, 0, %r7
   30              	
-  31 0051 C3       		ret
-  31              	ginsn: RET
+  31 003f 4883C508 		add    \$8, %rbp
+  31              	ginsn: ADD %r6, 8, %r6
+  32              	
+  33 0043 488D05FE 		lea    -0x2\(%rip\), %rax
 GAS LISTING .*
 
 
-  32              	.LFE0:
-  32              	ginsn: SYM .LFE0
-  33              		.size   foo, .-foo
-  33              	ginsn: SYM FUNC_END
+  33      FFFFFF
+  33              	ginsn: ADD %r4, -2, %r0
+  34 004a 67488905 		mov    %rax, 0x2\(%eip\)
+  34      02000000 
+  34              	ginsn: MOV %r0, \[%r4\+2\]
+  35 0052 67488B05 		mov    -0x2\(%eip\), %rax
+  35      FEFFFFFF 
+  35              	ginsn: MOV \[%r4\+-2\], %r0
+  36              	
+  37 005a 4889EC   		mov    %rbp, %rsp
+  37              	ginsn: MOV %r6, %r7
+  38 005d 5D       		pop    %rbp
+  38              	ginsn: LOAD \[%r7\+0\], %r6
+  38              	ginsn: ADD %r7, 8, %r7
+  39 005e C3       		ret
+  39              	ginsn: RET
+  40              	.LFE0:
+  40              	ginsn: SYM .LFE0
+  41              		.size   foo, .-foo
+  41              	ginsn: SYM FUNC_END
 
 #pass
diff --git a/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.s b/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.s
index 383c60f635b..09bf42e6e19 100644
--- a/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.s
+++ b/gas/testsuite/gas/scfi/x86_64/ginsn-dw2-regnum-1.s
@@ -3,23 +3,29 @@
 	.globl  foo
 	.type   foo, @function
 foo:
-	add    $8, %al
-	add    $8, %cl
-	add    $8, %dl
-	add    $8, %ah
-	add    $8, %ch
-	add    $8, %dh
-	add    $8, %bh
-
-	add    $8, %axl
+	push   %rbp
+	mov    %rsp, %rbp
+
+	mov    -0x2(%rax), %al
+	mov    -0x2(%rax), %bl
+	mov    -0x2(%rax), %dl
+	mov    -0x2(%rax), %ah
+	mov    -0x2(%rax), %ch
+	mov    -0x2(%rax), %dh
+	mov    -0x2(%rax), %bh
+
+	mov    -0x2(%rax), %axl
+	mov    -0x2(%rax), %spl
+
+	mov    -0x2(%rax), %ax
+	mov    -0x2(%rax), %r8w
+	mov    -0x2(%rax), %sp
+
 	add    $8, %spl
 
-	add    $8, %ax
-	add    $8, %r8w
-	add    $8, %sp
+	mov    -0x2(%rax), %eax
+	mov    -0x2(%rax), %r8d
 
-	add    $8, %eax
-	add    $8, %r8d
 	add    $16384, %esp
 
 	add    $8, %rbp
@@ -28,6 +34,8 @@ foo:
 	mov    %rax, 0x2(%eip)
 	mov    -0x2(%eip), %rax
 
+	mov    %rbp, %rsp
+	pop    %rbp
 	ret
 .LFE0:
 	.size   foo, .-foo
