(in-package #:cmpref)

(eval-when
    #+building-clasp (:compile-toplevel)
    #-building-clasp (:load-toplevel :execute)
  (defvar *dtree-ops-as-list*
    '(("miss" 0 "DTREE_OP_MISS")
      ("advance" 1 "DTREE_OP_ADVANCE")
      ("tag-test" 2 "DTREE_OP_TAG_TEST" ((:label-arg "DTREE_FIXNUM_TAG_OFFSET")
                                         (:label-arg "DTREE_SINGLE_FLOAT_TAG_OFFSET")
                                         (:label-arg "DTREE_CHARACTER_TAG_OFFSET")
                                         (:label-arg "DTREE_CONS_TAG_OFFSET")
                                         (:offset "DTREE_GENERAL_TAG_OFFSET")))
      ("stamp-read" 3 "DTREE_OP_STAMP_READ" ((:label-arg "DTREE_READ_HEADER_OFFSET")
                                             (:offset "DTREE_READ_OTHER_OFFSET")))
      ("lt-branch" 4 "DTREE_OP_LT_BRANCH" ((:constant-arg "DTREE_LT_PIVOT_OFFSET")
                                           (:label-arg "DTREE_LT_LEFT_OFFSET")
                                           (:offset "DTREE_LT_RIGHT_OFFSET")))
      ("eq-check" 5 "DTREE_OP_EQ_CHECK" ((:constant-arg "DTREE_EQ_PIVOT_OFFSET")
                                         (:offset "DTREE_EQ_NEXT_OFFSET")))
      ("range-check" 6 "DTREE_OP_RANGE_CHECK" ((:constant-arg "DTREE_RANGE_MIN_OFFSET")
                                               (:constant-arg "DTREE_RANGE_MAX_OFFSET")
                                               (:offset "DTREE_RANGE_NEXT_OFFSET")))
      ("eql" 7 "DTREE_OP_EQL" ((:constant-arg "DTREE_EQL_OBJECT_OFFSET")
                               (:label-arg "DTREE_EQL_BRANCH_OFFSET")
                               (:offset "DTREE_EQL_NEXT_OFFSET")))
      ("optimized-slot-reader" 8 "DTREE_OP_SLOT_READ" ((:constant-arg "DTREE_SLOT_READER_INDEX_OFFSET")
                                                       (:constant-arg "DTREE_SLOT_READER_SLOT_NAME_OFFSET")))
      ("optimized-slot-writer" 9 "DTREE_OP_SLOT_WRITE" ((:constant-arg "DTREE_SLOT_WRITER_INDEX_OFFSET")))
      ("car" 10 "DTREE_OP_CAR" ((:constant-arg "DTREE_CAR_READER_INDEX_OFFSET")
                                (:constant-arg "DTREE_CAR_READER_CAR_NAME_OFFSET")))
      ("rplaca" 11 "DTREE_OP_RPLACA" ((:constant-arg "DTREE_RPLACA_WRITER_INDEX_OFFSET")))
      ("effective-method-outcome" 12 "DTREE_OP_EFFECTIVE_METHOD" ((:constant-arg "DTREE_EFFECTIVE_METHOD_OFFSET")))
      ("farg0" 13 "DTREE_OP_FARG0")
      ("farg1" 14 "DTREE_OP_FARG1")
      ("farg2" 15 "DTREE_OP_FARG2")
      ("farg3" 16 "DTREE_OP_FARG3")
      ("farg4" 17 "DTREE_OP_FARG4")
      ("argn" 18 "DTREE_OP_ARGN" ((:register-arg "DTREE_ARGN_OFFSET")
                                  (:offset "DTREE_ARGN_NEXT_OFFSET")))
      ("sd-eq-branch" 19 "DTREE_OP_SD_EQ_BRANCH" ((:constant-arg "DTREE_SD_STAMP_OFFSET")
                                                  (:label-arg "DTREE_SD_FAIL_OFFSET")
                                                  (:offset "DTREE_SD_NEXT_OFFSET")))
      ("single-dispatch-miss" 20 "DTREE_OP_SINGLE_DISPATCH_MISS")
      )))
