amduat/include/amduat/pel/program_dag.h
2025-12-20 13:54:18 +01:00

68 lines
1.3 KiB
C

#ifndef AMDUAT_PEL_PROGRAM_DAG_H
#define AMDUAT_PEL_PROGRAM_DAG_H
#include "amduat/asl/core.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef uint32_t amduat_pel_node_id_t;
typedef struct {
amduat_octets_t name;
uint32_t version;
} amduat_pel_operation_id_t;
typedef enum {
AMDUAT_PEL_DAG_INPUT_EXTERNAL = 0,
AMDUAT_PEL_DAG_INPUT_NODE = 1
} amduat_pel_dag_input_kind_t;
typedef struct {
uint32_t input_index;
} amduat_pel_dag_input_external_t;
typedef struct {
amduat_pel_node_id_t node_id;
uint32_t output_index;
} amduat_pel_dag_input_node_t;
typedef struct {
amduat_pel_dag_input_kind_t kind;
union {
amduat_pel_dag_input_external_t external;
amduat_pel_dag_input_node_t node;
} value;
} amduat_pel_dag_input_t;
typedef struct {
amduat_pel_node_id_t id;
amduat_pel_operation_id_t op;
amduat_pel_dag_input_t *inputs;
size_t inputs_len;
amduat_octets_t params;
} amduat_pel_node_t;
typedef struct {
amduat_pel_node_id_t node_id;
uint32_t output_index;
} amduat_pel_root_ref_t;
typedef struct {
amduat_pel_node_t *nodes;
size_t nodes_len;
amduat_pel_root_ref_t *roots;
size_t roots_len;
} amduat_pel_program_t;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* AMDUAT_PEL_PROGRAM_DAG_H */