Index: /branches/ia32/lisp-kernel/x86-spentry32.s
===================================================================
--- /branches/ia32/lisp-kernel/x86-spentry32.s	(revision 8208)
+++ /branches/ia32/lisp-kernel/x86-spentry32.s	(revision 8209)
@@ -290,4 +290,5 @@
 _endsubp(rplacd)
 
+/* args (src, unscaled-idx, val) in temp0, arg_y, arg_z */
 _spentry(gvset)
         .globl C(egc_gvset)
@@ -636,11 +637,35 @@
 	__(int $3)
 _endsubp(specref)
-	
+
+/* arg_y = special symbol, arg_z = new value. */
 _spentry(specset)
-	__(int $3)
+	__(movl symbol.binding_index(%arg_y),%imm0)
+	__(cmp %rcontext:tcr.tlb_limit,%imm0)
+	__(movl %rcontext:tcr.tlb_pointer,%temp1)
+	__(jae 1f)
+	__(movl (%temp1,%imm0),%temp0)
+	__(cmpb $no_thread_local_binding_marker,%temp0_b)
+	__(je 1f)
+	__(movl %arg_z,(%temp1,%imm0))
+	__(ret)
+1:	__(movl %arg_y,%temp0)
+	__(movl $1<<fixnumshift,%arg_y)
+	__(jmp _SPgvset)
 _endsubp(specset)
 	
 _spentry(specrefcheck)
-	__(int $3)
+	__(movl symbol.binding_index(%arg_z),%imm0)
+	__(cmp %rcontext:tcr.tlb_limit,%imm0)
+	__(movl %rcontext:tcr.tlb_pointer,%temp1)
+	__(mov %arg_z,%arg_y)
+	__(jae 7f)
+	__(movl (%temp1,%imm0),%arg_z)
+	__(cmpb $no_thread_local_binding_marker,%arg_z_b)
+	__(jne 8f)
+7:	__(movl symbol.vcell(%arg_y),%arg_z)
+8:	__(cmpb $unbound_marker,%arg_z_b)
+	__(jne,pt 9f)
+	__(uuo_error_reg_unbound(Rarg_y))
+9:	__(repret)		
 _endsubp(specrefcheck)
 
