diff options
author | MITSUNARI Shigeo <[email protected]> | 2013-04-17 06:12:31 +0900 |
---|---|---|
committer | MITSUNARI Shigeo <[email protected]> | 2013-04-17 06:12:31 +0900 |
commit | 57910b2920cc9ff017bbf50ee145b9f1110d2be8 (patch) | |
tree | b2df3117b535effcc1122be5243da53332b0bb38 | |
parent | a233ab985e72d8fca9734eaf405783b72cdef589 (diff) | |
download | xbyak-57910b2920cc9ff017bbf50ee145b9f1110d2be8.tar.gz xbyak-57910b2920cc9ff017bbf50ee145b9f1110d2be8.zip |
rename numQword as stackSizeByte
-rw-r--r-- | test/sf_test.cpp | 4 | ||||
-rw-r--r-- | xbyak/xbyak_util.h | 23 |
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; |