bf uses Label class
diff --git a/sample/bf.cpp b/sample/bf.cpp
index ce5c12e..6968920 100644
--- a/sample/bf.cpp
+++ b/sample/bf.cpp
@@ -10,12 +10,6 @@
 #endif
 
 class Brainfuck : public Xbyak::CodeGenerator {
-private:
-	enum Direction { B, F };
-	std::string toStr(int labelNo, Direction dir)
-	{
-		return Xbyak::Label::toStr(labelNo) + (dir == B ? 'B' : 'F');
-	}
 public:
 	int getContinuousChar(std::istream& is, char c)
 	{
@@ -67,8 +61,7 @@
 		mov(pGetchar, rsi); // getchar
 		mov(stack, rdx); // stack
 #endif
-		int labelNo = 0;
-		std::stack<int> keepLabelNo;
+		std::stack<Label> labelF, labelB;
 		char c;
 		while (is >> c) {
 			switch (c) {
@@ -116,17 +109,22 @@
 				mov(cur, eax);
 				break;
 			case '[':
-				L(toStr(labelNo, B));
-				mov(eax, cur);
-				test(eax, eax);
-				jz(toStr(labelNo, F), T_NEAR);
-				keepLabelNo.push(labelNo++);
+				{
+					Label B = L();
+					labelB.push(B);
+					mov(eax, cur);
+					test(eax, eax);
+					Label F;
+					jz(F, T_NEAR);
+					labelF.push(F);
+				}
 				break;
 			case ']':
 				{
-					int no = keepLabelNo.top(); keepLabelNo.pop();
-					jmp(toStr(no, B));
-					L(toStr(no, F));
+					Label B = labelB.top(); labelB.pop();
+					jmp(B);
+					Label F = labelF.top(); labelF.pop();
+					L(F);
 				}
 				break;
 			default: