7d2bc9d113
[git-p4: depot-paths = "//depot/stg/hsa/drivers/hsa/runtime/": change = 1250152]
199 rader
7.2 KiB
C
199 rader
7.2 KiB
C
//=====================================================================
|
|
// Copyright 2016 (c), Advanced Micro Devices, Inc. All rights reserved.
|
|
//
|
|
/// \author AMD Developer Tools Team
|
|
/// \file
|
|
///
|
|
//=====================================================================
|
|
|
|
#ifndef SP3_H
|
|
#define SP3_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "sp3-vm.h"
|
|
#include "sp3-type.h"
|
|
|
|
/// @file sp3.h
|
|
/// @brief sp3 API
|
|
|
|
/// @brief Get version of the sp3 library.
|
|
///
|
|
/// @return String containing the version number.
|
|
///
|
|
SP3_EXPORT const char *sp3_version(void);
|
|
|
|
/// @brief Create a new sp3 context.
|
|
///
|
|
SP3_EXPORT struct sp3_context *sp3_new(void);
|
|
|
|
/// @brief Set option for sp3.
|
|
///
|
|
/// @param state sp3 context.
|
|
/// @param option Option name. Unknown options will raise an error.
|
|
/// @param value Option value. NULL is used to represent value-less options.
|
|
///
|
|
SP3_EXPORT void sp3_set_option(struct sp3_context *state, const char *option, const char *value);
|
|
|
|
/// @brief Parse a file into a context.
|
|
///
|
|
/// If 'file' is NULL, parse stdin.
|
|
///
|
|
SP3_EXPORT void sp3_parse_file(struct sp3_context *state, const char *file);
|
|
|
|
/// @brief Parse a string into a context.
|
|
///
|
|
SP3_EXPORT void sp3_parse_string(struct sp3_context *state, const char *string);
|
|
|
|
/// @brief Parse a file from the standard library into a context.
|
|
///
|
|
SP3_EXPORT void sp3_parse_library(struct sp3_context *state, const char *name);
|
|
|
|
/// @brief Call a sp3 function.
|
|
///
|
|
SP3_EXPORT void sp3_call(struct sp3_context *state, const char *func);
|
|
|
|
/// @brief Call a sp3 CF clause.
|
|
///
|
|
/// @param state sp3 context.
|
|
/// @param cffunc Name of clause to call. By convention, this is "main".
|
|
///
|
|
/// @return A compiled and linked shader. Free memory with sp3_free().
|
|
///
|
|
SP3_EXPORT struct sp3_shader *sp3_compile(struct sp3_context *state, const char *cffunc);
|
|
|
|
/// @brief Free a sp3_shader.
|
|
///
|
|
SP3_EXPORT void sp3_free_shader(struct sp3_shader *sh);
|
|
|
|
/// @brief Get current ASIC name set for a context.
|
|
///
|
|
SP3_EXPORT const char *sp3_getasic(struct sp3_context *state);
|
|
|
|
/// @brief Set current ASIC name for a context.
|
|
///
|
|
SP3_EXPORT void sp3_setasic(struct sp3_context *state, const char *chip);
|
|
|
|
/// @brief Set global variable in context to an integer.
|
|
///
|
|
SP3_EXPORT void sp3_set_param_int(struct sp3_context *state, const char *name, int value);
|
|
|
|
/// @brief Set global variable in context to an integer vector.
|
|
///
|
|
SP3_EXPORT void sp3_set_param_intvec(struct sp3_context *state, const char *name, int size, const int *value);
|
|
|
|
/// @brief Set global variable in context to a float.
|
|
///
|
|
SP3_EXPORT void sp3_set_param_float(struct sp3_context *state, const char *name, float value);
|
|
|
|
/// @brief Set global variable in context to a float vector.
|
|
///
|
|
SP3_EXPORT void sp3_set_param_floatvec(struct sp3_context *state, const char *name, int size, const float *value);
|
|
|
|
/// @brief Set error message header.
|
|
///
|
|
SP3_EXPORT void sp3_set_error_header(struct sp3_context *state, const char *str);
|
|
|
|
/// @brief Get ASIC metrics for the ASIC in current state.
|
|
///
|
|
/// Used by ELF tools to fill in some CAL fields.
|
|
///
|
|
SP3_EXPORT int sp3_asicinfo(struct sp3_context *state, const char *name);
|
|
|
|
/// @brief Free a context allocated by sp3_new/open/parse.
|
|
///
|
|
SP3_EXPORT void sp3_close(struct sp3_context *state);
|
|
|
|
/// @brief Disassemble a shader.
|
|
///
|
|
/// This call is likely to change to something that will take a filled sp3_shader structure later on.
|
|
///
|
|
/// @param state sp3 context (use sp3_new to allocate and sp3_setasic to set ASIC).
|
|
/// @param bin Memory map with the opcodes (see sp3-vm.h).
|
|
/// @param base Start of the shader in the memory map (in VM entries, i.e. 32-bit words).
|
|
/// @param name Same to give the disassembled shader.
|
|
/// @param shader_type One of the SHTYPE_* constants.
|
|
/// @param include Literal text to include in the CF clause (NULL includes nothing).
|
|
/// @param max_len Maximum length of CF clause. Matters if SP3DIS_FORCEVALID is set.
|
|
/// @param flags A mask of SP3DIS_* flags.
|
|
///
|
|
/// @return Shader disassembly as a string (allocated with malloc()). Free memory with sp3_free().
|
|
///
|
|
SP3_EXPORT char *sp3_disasm(struct sp3_context *state, sp3_vma *bin, sp3_vmaddr base, const char *name, int shader_type, const char *include, unsigned max_len, unsigned flags);
|
|
|
|
/// @brief Disassemble a single shader instruction.
|
|
///
|
|
/// This call is likely to change to something that will take a filled sp3_shader structure later on.
|
|
///
|
|
/// @param state sp3 context (use sp3_new to allocate and sp3_setasic to set ASIC).
|
|
/// @param inst Pointer to dwords containing instruction (exact number of dwords required depends on instruction).
|
|
/// @param base Start of the shader in the memory map (in VM entries, i.e. 32-bit words).
|
|
/// @param addr Address of the instruction being disassembled (in VM entries, i.e. 32-bit words).
|
|
/// @param shader_type One of the SHTYPE_* constants.
|
|
/// @param flags A mask of SP3DIS_* flags.
|
|
///
|
|
/// @return Shader disassembly as a string (allocated with malloc()). Free memory with sp3_free().
|
|
///
|
|
SP3_EXPORT char *sp3_disasm_inst(struct sp3_context *state, const unsigned inst[2], sp3_vmaddr base, sp3_vmaddr addr, int shader_type, unsigned flags);
|
|
|
|
/// @brief Parse a register stream.
|
|
///
|
|
/// Can be called before sp3_disasm to preset things like ALU, boolean and loop constants.
|
|
///
|
|
/// This call is likely to merge with sp3_disasm later on.
|
|
///
|
|
/// @param state sp3 context to fill with state.
|
|
/// @param nregs Number of register entries.
|
|
/// @param regs Register stream to parse.
|
|
/// @param shader_type One of the SHTYPE_* constants.
|
|
///
|
|
SP3_EXPORT void sp3_setregs(struct sp3_context *state, unsigned nregs, const struct sp3_reg *regs, int shader_type);
|
|
|
|
|
|
/// @brief Set shader comments
|
|
///
|
|
/// @param state sp3 context.
|
|
/// @param map Map of comments (0 for no comment, other values will be passed to the callback).
|
|
/// @param f_top Callback returning comment to place above the opcode.
|
|
/// @param f_right Callback returning comment to place to the right of the opcode.
|
|
/// @param ctx Void pointer to pass to comment callbacks.
|
|
///
|
|
SP3_EXPORT void sp3_setcomments(struct sp3_context *state, sp3_vma *map, sp3_comment_cb f_top, sp3_comment_cb f_right, void *ctx);
|
|
|
|
/// @brief Set alternate shader entry points
|
|
///
|
|
/// Used for disassembly; this marks an additional location in memory
|
|
/// (besides the start address) where shader code may be found. Generally
|
|
/// required for jump tables and any case where the shader may perform
|
|
/// indirect jumps to ensure that disassembly locates all shader
|
|
/// instructions.
|
|
///
|
|
/// @param state sp3 context (use sp3_new to allocate and sp3_setasic to set ASIC).
|
|
/// @param addr Address of the instruction being disassembled (in VM entries, i.e. 32-bit words).
|
|
///
|
|
SP3_EXPORT void sp3_setentrypoint(struct sp3_context *state, sp3_vmaddr addr);
|
|
|
|
/// @brief Clear alternate shader entry points
|
|
///
|
|
/// Clear all entry points previously set with sp3_setentrypoint.
|
|
///
|
|
/// @param state sp3 context (use sp3_new to allocate and sp3_setasic to set ASIC).
|
|
///
|
|
SP3_EXPORT void sp3_clearentrypoints(struct sp3_context *state);
|
|
|
|
/// @brief Free memory allocated by sp3.
|
|
///
|
|
/// Windows DLLs that allocate memory have to free it. This function
|
|
/// should be used to free the result of sp3_disasm, sp3_compile etc.
|
|
///
|
|
SP3_EXPORT void sp3_free(void *ptr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif
|