Ryan Houdek | 2cd1aa3 | 2019-04-21 20:41:09 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2019 Connor Abbott <cwabbott0@gmail.com> |
| 3 | * Copyright (C) 2019 Lyude Paul <thatslyude@gmail.com> |
| 4 | * Copyright (C) 2019 Ryan Houdek <Sonicadvance1@gmail.com> |
| 5 | * |
| 6 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 7 | * copy of this software and associated documentation files (the "Software"), |
| 8 | * to deal in the Software without restriction, including without limitation |
| 9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| 10 | * and/or sell copies of the Software, and to permit persons to whom the |
| 11 | * Software is furnished to do so, subject to the following conditions: |
| 12 | * |
| 13 | * The above copyright notice and this permission notice (including the next |
| 14 | * paragraph) shall be included in all copies or substantial portions of the |
| 15 | * Software. |
| 16 | * |
| 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| 20 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| 23 | * SOFTWARE. |
| 24 | */ |
| 25 | |
Alyssa Rosenzweig | 944cb8b | 2020-09-14 13:24:11 -0400 | [diff] [blame] | 26 | #ifndef __BI_DISASM_H |
| 27 | #define __BI_DISASM_H |
| 28 | |
Ryan Houdek | 2cd1aa3 | 2019-04-21 20:41:09 -0700 | [diff] [blame] | 29 | #include <stdbool.h> |
| 30 | #include <stddef.h> |
Alyssa Rosenzweig | 62bbc23 | 2019-08-14 12:19:01 -0700 | [diff] [blame] | 31 | #include <stdint.h> |
Icecream95 | 20a8957 | 2020-01-23 09:59:57 +1300 | [diff] [blame] | 32 | #include <stdio.h> |
Alyssa Rosenzweig | 944cb8b | 2020-09-14 13:24:11 -0400 | [diff] [blame] | 33 | #include "bifrost.h" |
Icecream95 | 20a8957 | 2020-01-23 09:59:57 +1300 | [diff] [blame] | 34 | |
| 35 | void disassemble_bifrost(FILE *fp, uint8_t *code, size_t size, bool verbose); |
Alyssa Rosenzweig | 944cb8b | 2020-09-14 13:24:11 -0400 | [diff] [blame] | 36 | |
Alyssa Rosenzweig | 9de34e1 | 2020-09-19 15:20:42 -0400 | [diff] [blame] | 37 | enum bi_constmod { |
| 38 | BI_CONSTMOD_NONE, |
| 39 | BI_CONSTMOD_PC_LO, |
| 40 | BI_CONSTMOD_PC_HI, |
| 41 | BI_CONSTMOD_PC_LO_HI |
| 42 | }; |
Alyssa Rosenzweig | 944cb8b | 2020-09-14 13:24:11 -0400 | [diff] [blame] | 43 | |
Alyssa Rosenzweig | 9de34e1 | 2020-09-19 15:20:42 -0400 | [diff] [blame] | 44 | struct bi_constants { |
| 45 | /* Raw constant values */ |
| 46 | uint64_t raw[6]; |
| 47 | |
| 48 | /* Associated modifier derived from M values */ |
| 49 | enum bi_constmod mods[6]; |
| 50 | }; |
| 51 | |
| 52 | void |
Alyssa Rosenzweig | bdb33f7 | 2020-09-20 09:29:08 -0400 | [diff] [blame] | 53 | bi_disasm_fma(FILE *fp, unsigned bits, struct bifrost_regs *srcs, struct bifrost_regs *next_regs, unsigned staging_register, unsigned branch_offset, struct bi_constants *consts, bool first); |
Alyssa Rosenzweig | 9de34e1 | 2020-09-19 15:20:42 -0400 | [diff] [blame] | 54 | |
Alyssa Rosenzweig | bdb33f7 | 2020-09-20 09:29:08 -0400 | [diff] [blame] | 55 | void bi_disasm_add(FILE *fp, unsigned bits, struct bifrost_regs *srcs, struct bifrost_regs *next_regs, unsigned staging_register, unsigned branch_offset, struct bi_constants *consts, bool first); |
Alyssa Rosenzweig | 944cb8b | 2020-09-14 13:24:11 -0400 | [diff] [blame] | 56 | |
Alyssa Rosenzweig | bdb33f7 | 2020-09-20 09:29:08 -0400 | [diff] [blame] | 57 | void bi_disasm_dest_fma(FILE *fp, struct bifrost_regs *next_regs, bool first); |
| 58 | void bi_disasm_dest_add(FILE *fp, struct bifrost_regs *next_regs, bool first); |
Alyssa Rosenzweig | 0504181 | 2020-09-14 13:08:44 -0400 | [diff] [blame] | 59 | |
Alyssa Rosenzweig | 9de34e1 | 2020-09-19 15:20:42 -0400 | [diff] [blame] | 60 | void dump_src(FILE *fp, unsigned src, struct bifrost_regs srcs, struct bi_constants *consts, bool isFMA); |
Alyssa Rosenzweig | deab752 | 2020-09-14 13:09:53 -0400 | [diff] [blame] | 61 | |
Alyssa Rosenzweig | 944cb8b | 2020-09-14 13:24:11 -0400 | [diff] [blame] | 62 | #endif |