diff --git a/test/sf_test.cpp b/test/sf_test.cpp
index ced893b..8988bb0 100644
--- a/test/sf_test.cpp
+++ b/test/sf_test.cpp
@@ -129,6 +129,55 @@
 		add(rax, sf.p[2]);
 		add(rax, sf.p[3]);
 	}
+
+	/*
+		int64_t f(const int64_t a[13]) { return sum-of-a[]; }
+	*/
+	void gen13()
+	{
+		StackFrame sf(this, 1, 13);
+		for (int i = 0; i < 13; i++) {
+			mov(sf.t[i], ptr[sf.p[0] + i * 8]);
+		}
+		mov(rax, sf.t[0]);
+		for (int i = 1; i < 13; i++) {
+			add(rax, sf.t[i]);
+		}
+	}
+	/*
+		same as gen13
+	*/
+	void gen14()
+	{
+		StackFrame sf(this, 1, 11 | UseRCX | UseRDX);
+		Pack t = sf.t;
+		t.append(rcx);
+		t.append(rdx);
+		for (int i = 0; i < 13; i++) {
+			mov(t[i], ptr[sf.p[0] + i * 8]);
+		}
+		mov(rax, t[0]);
+		for (int i = 1; i < 13; i++) {
+			add(rax, t[i]);
+		}
+	}
+	/*
+		return (1 << 15) - 1;
+	*/
+	void gen15()
+	{
+		StackFrame sf(this, 0, 14, 8);
+		Pack t = sf.t;
+		t.append(rax);
+		for (int i = 0; i < 15; i++) {
+			mov(t[i], 1 << i);
+		}
+		mov(qword[rsp], 0);
+		for (int i = 0; i < 15; i++) {
+			add(ptr[rsp], t[i]);
+		}
+		mov(rax, ptr[rsp]);
+	}
 };
 
 struct Code2 : Xbyak::CodeGenerator {
@@ -159,6 +208,7 @@
 	}
 };
 
+
 static int errNum = 0;
 void check(int x, int y)
 {
@@ -282,6 +332,20 @@
 	int (*f12)(int, int, int, int) = code.getCurr<int (*)(int, int, int, int)>();
 	code.gen12();
 	check(24, f12(3, 5, 7, 9));
+
+	{
+		int64_t tbl[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
+		int64_t (*f13)(const int64_t*) = code.getCurr<int64_t (*)(const int64_t*)>();
+		code.gen13();
+		check(91, f13(tbl));
+
+		int64_t (*f14)(const int64_t*) = code.getCurr<int64_t (*)(const int64_t*)>();
+		code.gen14();
+		check(91, f14(tbl));
+	}
+	int (*f15)() = code.getCurr<int (*)()>();
+	code.gen15();
+	check((1 << 15) - 1, f15());
 }
 
 void put(const Xbyak::util::Pack& p)
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h
index 212e3a7..0154450 100644
--- a/xbyak/xbyak_util.h
+++ b/xbyak/xbyak_util.h
@@ -416,7 +416,7 @@
 const int UseRDX = 1 << 7;
 
 class Pack {
-	static const size_t maxTblNum = 10;
+	static const size_t maxTblNum = 15;
 	const Xbyak::Reg64 *tbl_[maxTblNum];
 	size_t n_;
 public:
@@ -476,7 +476,7 @@
 	const Xbyak::Reg64& operator[](size_t n) const
 	{
 		if (n >= n_) {
-			fprintf(stderr, "ERR Pack bad n=%d\n", (int)n);
+			fprintf(stderr, "ERR Pack bad n=%d(%d)\n", (int)n, (int)n_);
 			throw Error(ERR_BAD_PARAMETER);
 		}
 		return *tbl_[n];
@@ -518,6 +518,7 @@
 	static const int rcxPos = 3;
 	static const int rdxPos = 2;
 #endif
+	static const int maxRegNum = 14; // maxRegNum = 16 - rsp - rax
 	Xbyak::CodeGenerator *code_;
 	int pNum_;
 	int tNum_;
@@ -527,7 +528,7 @@
 	int P_;
 	bool makeEpilog_;
 	Xbyak::Reg64 pTbl_[4];
-	Xbyak::Reg64 tTbl_[10];
+	Xbyak::Reg64 tTbl_[maxRegNum];
 	Pack p_;
 	Pack t_;
 	StackFrame(const StackFrame&);
@@ -539,7 +540,7 @@
 		make stack frame
 		@param sf [in] this
 		@param pNum [in] num of function parameter(0 <= pNum <= 4)
-		@param tNum [in] num of temporary register(0 <= tNum <= 10, with UseRCX, UseRDX)
+		@param tNum [in] num of temporary register(0 <= tNum, with UseRCX, UseRDX) #{pNum + tNum [+rcx] + [rdx]} <= 14
 		@param stackSizeByte [in] local stack size
 		@param makeEpilog [in] automatically call close() if true
 
@@ -566,7 +567,7 @@
 		using namespace Xbyak;
 		if (pNum < 0 || pNum > 4) throw Error(ERR_BAD_PNUM);
 		const int allRegNum = pNum + tNum_ + (useRcx_ ? 1 : 0) + (useRdx_ ? 1 : 0);
-		if (allRegNum < pNum || allRegNum > 14) throw Error(ERR_BAD_TNUM);
+		if (tNum_ < 0 || allRegNum > maxRegNum) throw Error(ERR_BAD_TNUM);
 		const Reg64& _rsp = code->rsp;
 		saveNum_ = (std::max)(0, allRegNum - noSaveNum);
 		const int *tbl = getOrderTbl() + noSaveNum;
@@ -631,7 +632,7 @@
 	}
 	int getRegIdx(int& pos) const
 	{
-		assert(pos < 14);
+		assert(pos < maxRegNum);
 		using namespace Xbyak;
 		const int *tbl = getOrderTbl();
 		int r = tbl[pos++];
