@(in-package :sys)
@(mdo (find-struct-type 'assembler))
@(bind oc @(keep-if .code %oc-list-builder%.(get)))
@(next "vm.h")
@(collect)
@{copyright}
@(until)

@(end)
@(output "vmop.h")
@{copyright "\n"}

typedef enum vm_op {
@  (repeat)
  @{oc.symbol :filter :upcase} = @{oc.code},@(if oc.deprecated
                                               " /* deprecated */")
@  (end)
} vm_op_t;

#define VM_LEV_BITS @{sys:%lev-bits%}
#define VM_LEV_MASK @(fmt "0x~X" (pred (ash 1  sys:%lev-bits%)))
#define VM_SM_LEV_BITS @{sys:%sm-lev-bits%}
#define VM_SM_LEV_MASK @(fmt "0x~X" (pred (ash 1  sys:%sm-lev-bits%)))
#define VM_MAX_LEV @{sys:%max-lev%}
#define VM_MAX_V_LEV @{sys:%max-v-lev%}
#define VM_LEV_SIZE @{sys:%lev-size%}
@(end)