LispBM
Macros | Functions
stack.c File Reference
#include <lbm_memory.h>
#include <lbm_types.h>
#include <string.h>
#include "stack.h"
#include "print.h"
Include dependency graph for stack.c:

Macros

#define STACK_UNUSED_BYTE   0x55
 
#define STACK_UNUSED_WORD   0x55555555
 

Functions

int lbm_stack_allocate (lbm_stack_t *s, lbm_uint stack_size)
 
int lbm_stack_create (lbm_stack_t *s, lbm_uint *data, lbm_uint stack_size)
 
lbm_uint lbm_get_max_stack (lbm_stack_t *s)
 
void lbm_stack_free (lbm_stack_t *s)
 
void lbm_stack_clear (lbm_stack_t *s)
 
int lbm_stack_drop (lbm_stack_t *s, lbm_uint n)
 
int lbm_push (lbm_stack_t *s, lbm_uint val)
 
int lbm_pop (lbm_stack_t *s, lbm_uint *val)
 
int lbm_pop_2 (lbm_stack_t *s, lbm_uint *r0, lbm_uint *r1)
 
int lbm_pop_3 (lbm_stack_t *s, lbm_uint *r0, lbm_uint *r1, lbm_uint *r2)
 

Macro Definition Documentation

◆ STACK_UNUSED_BYTE

#define STACK_UNUSED_BYTE   0x55

◆ STACK_UNUSED_WORD

#define STACK_UNUSED_WORD   0x55555555

Function Documentation

◆ lbm_get_max_stack()

lbm_uint lbm_get_max_stack ( lbm_stack_t s)

Check maximum SP

Parameters
sPointer to stack
Returns
maximum SP written to in stack.

◆ lbm_pop()

int lbm_pop ( lbm_stack_t s,
lbm_uint val 
)

Pop a value from a stack.

Parameters
sStack to pop a value from.
valPointer to an lbm_value to store the pop:ed value int.
Returns
1 on success and 0 on failure (stack is empty).

◆ lbm_pop_2()

int lbm_pop_2 ( lbm_stack_t s,
lbm_uint r0,
lbm_uint r1 
)

Pop 2 values from a stack.

Parameters
sStack to pop values from.
r0Pointer to lbm_value where the first pop:ed value will be stored.
r1Pointer to lbm_value where the seconds pop:ed value will be stored.
Returns
1 on success and 0 on failure (stack is empty).

◆ lbm_pop_3()

int lbm_pop_3 ( lbm_stack_t s,
lbm_uint r0,
lbm_uint r1,
lbm_uint r2 
)

Pop 3 values from a stack.

Parameters
sStack to pop values from.
r0
r1
r2
Returns
1 on success and 0 on failure (stack is empty).

◆ lbm_push()

int lbm_push ( lbm_stack_t s,
lbm_uint  val 
)

Push an element onto a stack.

Parameters
sStack to push a value onto.
valValue to push to the stack.
Returns
1 on success and 0 on failure (stack is full).

◆ lbm_stack_allocate()

int lbm_stack_allocate ( lbm_stack_t s,
lbm_uint  stack_size 
)

Allocate a stack on the symbols and arrays memory. lbm_memory_init must have been run before this function or it will fail.

Parameters
sPointer to an lbm_stack_t to initialize.
stack_sizeSize in 32 bit words of stack to allocate.
Returns
1 on success and 0 on failure.

◆ lbm_stack_clear()

void lbm_stack_clear ( lbm_stack_t s)

Sets the stack SP to 0.

Parameters
sStack to clear.

◆ lbm_stack_create()

int lbm_stack_create ( lbm_stack_t s,
lbm_uint data,
lbm_uint  size 
)

Create a stack in a statically allocated array.

Parameters
sPointer to an lbm_stack_t to initialize.
dataPointer to array of 32 bit words to use as the stack storage.
sizeSize in number of 32 bit words.
Returns
1

◆ lbm_stack_drop()

int lbm_stack_drop ( lbm_stack_t s,
lbm_uint  n 
)

Drop n elements (from the top) of a stack.

Parameters
sStack to drop elements from.
nNumber of elements to drop.
Returns
1 on Success and 0 on failure.

◆ lbm_stack_free()

void lbm_stack_free ( lbm_stack_t s)

Free a stack allocated on the lispbm_memory.

Parameters
sPointer to lbm_stack_t to free.