⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.h

📁 专业汽车级嵌入式操作系统OSEK的源代码
💻 H
字号:
#include "configure.h"#include "threads.h"#include "interpreter.h"#include "memory.h"#include "language.h"#ifndef _STACK_H#define _STACK_H#define get_local_word(IDX_)       (localsBase[(IDX_)])#define get_local_ref(IDX_)        (localsBase[(IDX_)])#define inc_local_word(IDX_,NUM_)  (localsBase[(IDX_)] += (NUM_))#define just_set_top_word(WRD_)    (stackTop[0] = (WRD_))#define get_top_word()             (stackTop[0])#define get_top_ref()              (stackTop[0])#define get_word_at(DOWN_)         (*(stackTop-(DOWN_)))#define get_ref_at(DOWN_)          *(stackTop-(DOWN_))#define get_stack_ptr()            (stackTop)#define get_stack_ptr_at(DOWN_)    (stackTop-(DOWN_))// Note: The following locals should only be accessed// in this header file.extern STACKWORD *localsBase;extern STACKWORD *stackTop;/** * Clears the operand stack for the given stack frame. */static inline void init_sp (StackFrame *stackFrame, MethodRecord *methodRecord){  stackTop = stackFrame->localsBase + methodRecord->numLocals - 1;}/** * Clears/initializes the operand stack at the bottom-most stack frame, * and pushes a void (unitialized) element, which should be overriden * immediately with set_top_word or set_top_ref. */static inline void init_sp_pv (void){  stackTop = stack_array();}/** * With stack cleared, checks for stack overflow in given method. */static inline boolean is_stack_overflow (MethodRecord *methodRecord){  return (stackTop + methodRecord->maxOperands) >= (stack_array() + get_array_length((Object *) word2ptr (currentThread->stackArray)));}extern void update_stack_frame (StackFrame *stackFrame);extern void update_registers (StackFrame *stackFrame);/**--**/static inline void update_constant_registers (StackFrame *stackFrame){  localsBase = stackFrame->localsBase;}static inline void push_word (const STACKWORD word){  *(++stackTop) = word;}static inline void push_ref (const REFERENCE word){  *(++stackTop) = word;}static inline STACKWORD pop_word (void){  return *stackTop--;}static inline REFERENCE pop_ref (void){  return *stackTop--;}static inline JINT pop_jint (void){  return word2jint(*stackTop--);}static inline STACKWORD pop_word_or_ref(){  return *stackTop--;}static inline void pop_jlong (JLONG *lword){  lword->lo = *stackTop--;  lword->hi = *stackTop--;}static inline void pop_words (byte aNum){  stackTop -= aNum;}static inline void just_pop_word (void){  --stackTop;}static inline void just_pop_ref (void){  --stackTop;}static inline void push_void (void){  ++stackTop;}static inline void set_top_ref (REFERENCE aRef){  *stackTop = aRef;}static inline void set_top_word (STACKWORD aWord){  *stackTop = aWord;}static inline void dup (void){  stackTop++;  *stackTop = *(stackTop-1);}static inline void dup2 (void){  *(stackTop+1) = *(stackTop-1);  *(stackTop+2) = *stackTop;  stackTop += 2;}static inline void dup_x1 (void){  stackTop++;  *stackTop = *(stackTop-1);  *(stackTop-1) = *(stackTop-2);  *(stackTop-2) = *stackTop;}static inline void dup2_x1 (void){  stackTop += 2;  *stackTop = *(stackTop-2);  *(stackTop-1) = *(stackTop-3);  *(stackTop-2) = *(stackTop-4);  *(stackTop-3) = *stackTop;  *(stackTop-4) = *(stackTop-1);}static inline void dup_x2 (void){  stackTop++;  *stackTop = *(stackTop-1);  *(stackTop-1) = *(stackTop-2);  *(stackTop-2) = *(stackTop-3);  *(stackTop-3) = *stackTop;}static inline void dup2_x2 (void){  stackTop += 2;  *stackTop = *(stackTop-2);  *(stackTop-1) = *(stackTop-3);  *(stackTop-2) = *(stackTop-4);  *(stackTop-3) = *(stackTop-5);  *(stackTop-4) = *stackTop;  *(stackTop-5) = *(stackTop-1);}static inline void swap (void){  tempStackWord = *stackTop;  *stackTop = *(stackTop-1);  *(stackTop-1) = tempStackWord;}static inline void set_local_word (byte aIndex, STACKWORD aWord){  localsBase[aIndex] = aWord;}static inline void set_local_ref (byte aIndex, REFERENCE aWord){  localsBase[aIndex] = aWord;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -