aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <[email protected]>2013-04-17 06:12:31 +0900
committerMITSUNARI Shigeo <[email protected]>2013-04-17 06:12:31 +0900
commit57910b2920cc9ff017bbf50ee145b9f1110d2be8 (patch)
treeb2df3117b535effcc1122be5243da53332b0bb38
parenta233ab985e72d8fca9734eaf405783b72cdef589 (diff)
downloadxbyak-57910b2920cc9ff017bbf50ee145b9f1110d2be8.tar.gz
xbyak-57910b2920cc9ff017bbf50ee145b9f1110d2be8.zip
rename numQword as stackSizeByte
-rw-r--r--test/sf_test.cpp4
-rw-r--r--xbyak/xbyak_util.h23
2 files changed, 17 insertions, 10 deletions
diff --git a/test/sf_test.cpp b/test/sf_test.cpp
index 0f8508d..97e44e7 100644
--- a/test/sf_test.cpp
+++ b/test/sf_test.cpp
@@ -81,7 +81,7 @@ struct Code : public Xbyak::CodeGenerator {
void gen9()
{
- StackFrame sf(this, 4, 3 | UseRCX | UseRDX, 4);
+ StackFrame sf(this, 4, 3 | UseRCX | UseRDX, 32);
xor_(rcx, rcx);
xor_(rdx, rdx);
mov(sf.t(0), 1);
@@ -98,7 +98,7 @@ struct Code : public Xbyak::CodeGenerator {
void gen10()
{
- StackFrame sf(this, 4, 8 | UseRCX | UseRDX, 4);
+ StackFrame sf(this, 4, 8 | UseRCX | UseRDX, 32);
xor_(rcx, rcx);
xor_(rdx, rdx);
for (int i = 0; i < 8; i++) {
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h
index ea2185c..2fb8e29 100644
--- a/xbyak/xbyak_util.h
+++ b/xbyak/xbyak_util.h
@@ -267,17 +267,20 @@ public:
/*
make stack frame
@param sf [in] this
- @param pNum [in] num of global parameter
- @param tNum [in] num of temporary register
- @param numQword [in] local stack size
- @param useReg [in] reserve rcx, rdx if necessary
+ @param pNum [in] num of function parameter(0 <= pNum <= 4)
+ @param tNum [in] num of temporary register(0 <= tNum <= 10, with UseRCX, UseRDX)
+ @param stackSizeByte [in] local stack size
+ @param makeEpilog [in] automatically call close() if true
+
you can use
rax
gp0, ..., gp(pNum - 1)
gt0, ..., gt(tNum-1)
- rsp[0..8 * numQrod - 1]
+ rcx if tNum & UseRCX
+ rdx if tNum & UseRDX
+ rsp[0..stackSizeByte - 1]
*/
- StackFrame(Xbyak::CodeGenerator *code, int pNum, int tNum = 0, int numQword = 0, bool makeEpilog = true)
+ StackFrame(Xbyak::CodeGenerator *code, int pNum, int tNum = 0, int stackSizeByte = 0, bool makeEpilog = true)
: code_(code)
, pNum_(pNum)
, tNum_(tNum & ~(UseRCX | UseRDX))
@@ -295,8 +298,8 @@ public:
const AddressFrame& ptr = code->ptr;
saveNum_ = (std::max)(0, allRegNum - noSaveNum);
const int *tbl = getOrderTbl() + noSaveNum;
- P_ = saveNum_ + numQword;
- if (P_ > 0 && (P_ & 1) == 0) P_++; // ensure (rsp % 16) == 0
+ P_ = saveNum_ + (stackSizeByte + 7) / 8;
+ if (P_ > 0 && (P_ & 1) == 0) P_++; // here (rsp % 16) == 8, then increment P_ for 16 byte alignment
P_ *= 8;
if (P_ > 0) code->sub(rsp, P_);
#ifdef XBYAK64_WIN
@@ -319,6 +322,10 @@ public:
tTbl_[i] = Xbyak::Reg64(getRegIdx(pos));
}
}
+ /*
+ make epilog manually
+ @param callRet [in] call ret() if true
+ */
void close(bool callRet = true)
{
using namespace Xbyak;