diff --git a/compiler/sparcgen/ncpuset.pas b/compiler/sparcgen/ncpuset.pas
index 2ca450c03d..cb5cf73c30 100644
--- a/compiler/sparcgen/ncpuset.pas
+++ b/compiler/sparcgen/ncpuset.pas
@@ -109,11 +109,15 @@ unit ncpuset;
           end;
         current_asmdata.getjumplabel(table);
         indexreg:=cg.getaddressregister(current_asmdata.CurrAsmList);
+{$ifdef SPARC64}
+        cg.a_op_const_reg_reg(current_asmdata.CurrAsmList,OP_SHL,OS_ADDR,3,hregister,indexreg);
+{$else SPARC64}
         cg.a_op_const_reg_reg(current_asmdata.CurrAsmList,OP_SHL,OS_ADDR,2,hregister,indexreg);
+{$endif SPARC64}
         { create reference }
         current_asmdata.getjumplabel(base);
         cg.a_label(current_asmdata.CurrAsmList,base);
-        reference_reset_symbol(href,table,(-aint(min_))*4,sizeof(pint),[]);
+        reference_reset_symbol(href,table,(-aint(min_))*sizeof(pint),sizeof(pint),[]);
         href.relsymbol:=base;
         { Generate the following code:
           .Lbase:
@@ -133,6 +137,7 @@ unit ncpuset;
         current_asmdata.CurrAsmList.concat(taicpu.op_ref_reg(A_SETHI,href,basereg));
         href.refaddr:=addr_low;
         current_asmdata.CurrAsmList.concat(taicpu.op_reg_ref_reg(A_OR,basereg,href,basereg));
+
         { add index }
         cg.a_op_reg_reg_reg(current_asmdata.CurrAsmList,OP_ADD,OS_ADDR,basereg,indexreg,basereg);
 
@@ -143,10 +148,13 @@ unit ncpuset;
         href.index:=jmpreg;
         href.refaddr:=addr_full;
         current_asmdata.CurrAsmList.concat(taicpu.op_ref(A_JMP,href));
+
         { Delay slot }
         current_asmdata.CurrAsmList.concat(taicpu.op_none(A_NOP));
         cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_O7);
+
         { generate jump table }
+        current_asmdata.CurrAsmList.Concat(tai_align.Create(sizeof(pint)));
         cg.a_label(current_asmdata.CurrAsmList,table);
         genitem(current_asmdata.CurrAsmList,hp);
       end;