 +nacljmp, 1, 0xff, 0x4, 1, CpuNo64, Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 }
 +naclcall, 2, 0xff, 0x2, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, Reg64 }
 +nacljmp, 2, 0xff, 0x4, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, Reg64 }
++naclasp, 2, 0x01, None, 1, Cpu64, W|Modrm|No_sSuf|No_ldSuf, { Reg32, Reg64 }
 +naclasp, 2, 0x01, None, 1, Cpu64, W|Modrm|No_sSuf|No_ldSuf, { Imm8S, Reg64 }
 +naclasp, 2, 0x01, None, 1, Cpu64, W|Modrm|No_sSuf|No_ldSuf, { Imm32S, Reg64 }
++naclssp, 2, 0x01, None, 1, Cpu64, W|Modrm|No_sSuf|No_ldSuf, { Reg32, Reg64 }
 +naclssp, 2, 0x01, None, 1, Cpu64, W|Modrm|No_sSuf|No_ldSuf, { Imm8S, Reg64 }
 +naclssp, 2, 0x01, None, 1, Cpu64, W|Modrm|No_sSuf|No_ldSuf, { Imm32S, Reg64 }
 +

+static void
+insert_add_sp_sandbox_code (offsetT insn_start_off)
+{
+  char *p = frag_more(2);
+  if (imm_size (0) == 1)
+    p[0] = 0x83; // ADD imm8, %esp
+  else
+    p[0] = 0x81; // ADD imm32, %esp
+  p[1] = 0xc4;
+  output_imm (frag_now, insn_start_off);
+  // Second operand is SP
+  i.rm.regmem = 4;
+  // Immediate was already used
+  i.imm_operands = 0;
+}
+
+
+static void
+insert_sub_sp_sandbox_code (offsetT insn_start_off)
+{
+  char *p = frag_more(2);
+  if (imm_size (0) == 1)
+    p[0] = 0x83; // ADD imm8, %esp
+  else
+    p[0] = 0x81; // ADD imm32, %esp
+  p[1] = 0xec;
+  output_imm (frag_now, insn_start_off);
+  // Second operand is SP
+  i.rm.regmem = 4;
+  // Immediate was already used
+  i.imm_operands = 0;
+}
+
+

 	  /* The prefix bytes.  */
 	  for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
 	    if (*q)
@@ -5700,10 +6042,18 @@
 	}
 
       if (i.disp_operands)
