/* ============================================================================
 *  duffle DSL — GTE Vendor Mnemonics (opt-in)
 *  ============================================================================
 *
 *  Provides the textbook MIPS assembly mnemonics for the GTE/COP2 instructions as thin aliases to the duffle macros in gte.h.
 *  The duffle names are primary; this header is for users who prefer the textbook mnemonics.
 *
 *  USAGE:   #include "duffle/gte_vendor_sym.h"   // after gte.h
 *
 *  Mapping (vendor -> duffle):
 *    Transfers (move GPR <-> GTE control/data register):
 *      gte_mfc2  -> gte_mv_from_data_r   (move from coprocessor 2 data reg)
 *      gte_mtc2  -> gte_mv_to_data_r     (move to coprocessor 2 data reg)
 *      gte_cfc2  -> gte_mv_from_ctrl_r   (move from coprocessor 2 control reg)
 *      gte_ctc2  -> gte_mv_to_ctrl_r     (move to coprocessor 2 control reg)
 *
 *    Data load/store (load/store word to coprocessor 2 data register):
 *      gte_lwc2(rt, base, off)  -> gte_lw(rt, base, off)
 *      gte_swc2(rt, base, off)  -> gte_sw(rt, base, off)
 *      (the lower-level vector variants gte_lw_v0_xy etc. don't have
 *      vendor mnemonics; they're already gte_-prefixed and short)
 * ============================================================================ */

#ifdef INTELLISENSE_DIRECTIVES
#	pragma once
#	include "gte.h"
#endif

#ifndef DUFFLE_GTE_VENDOR_SYM_H
#define DUFFLE_GTE_VENDOR_SYM_H

/* Transfers (move GPR <-> GTE control/data register) */
#define gte_mfc2(rt, rd)  gte_mv_from_data_r((rt), (rd))
#define gte_mtc2(rt, rd)  gte_mv_to_data_r((rt), (rd))
#define gte_cfc2(rt, rd)  gte_mv_from_ctrl_r((rt), (rd))
#define gte_ctc2(rt, rd)  gte_mv_to_ctrl_r((rt), (rd))

/* Data load/store (load/store word to coprocessor 2 data register) */
#define gte_lwc2(rt, base, off)  gte_lw((rt), (base), (off))
#define gte_swc2(rt, base, off)  gte_sw((rt), (base), (off))

#endif
