mirror of
https://codeberg.org/1414codeforge/ubgpsuite.git
synced 2025-06-05 21:29:11 +02:00
[*] Initial commit
This commit is contained in:
66
lonetix/bgp/vm_gccdef.h
Normal file
66
lonetix/bgp/vm_gccdef.h
Normal file
@@ -0,0 +1,66 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
/**
|
||||
* \file bgp/vm_gccdef.h
|
||||
*
|
||||
* `#define`s for GNUC optimized BGP VM execution loop.
|
||||
*
|
||||
* \copyright The DoubleFourteen Code Forge (C) All Rights Reserved
|
||||
* \author Lorenzo Cogotti
|
||||
*
|
||||
* \note This file should be `#include`d by `bgp/vm.c`
|
||||
*/
|
||||
|
||||
#ifdef DF_BGP_VMDEF_H_
|
||||
#error "Only one vm_<impl>def.h file may be #include-d"
|
||||
#endif
|
||||
#define DF_BGP_VMDEF_H_
|
||||
|
||||
#define _CONCAT(x, y) x ## y
|
||||
#define _XCONCAT(x, y) _CONCAT(x, y)
|
||||
|
||||
#ifdef __clang__
|
||||
// No __attribute__ on labels in CLANG
|
||||
#define LIKELY
|
||||
#else
|
||||
|
||||
#define LIKELY \
|
||||
_XCONCAT(_BRANCH_PREDICT_HINT, __COUNTER__): \
|
||||
__attribute__((__hot__, __unused__))
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
// No __attribute__ on labels in CLANG
|
||||
#define UNLIKELY
|
||||
#else
|
||||
|
||||
#define UNLIKELY \
|
||||
_XCONCAT(_BRANCH_PREDICT_HINT, __COUNTER__): \
|
||||
__attribute__((__cold__, __unused__))
|
||||
|
||||
#endif
|
||||
|
||||
#define FETCH(ir, vm) (ir = (vm)->prog[(vm)->pc++])
|
||||
|
||||
#define EXPECT(opcode, ir, vm) \
|
||||
do { \
|
||||
if (__builtin_expect( \
|
||||
BGP_VMOPC((vm)->prog[(vm)->pc]) == BGP_VMOP_ ## opcode, \
|
||||
1 \
|
||||
)) { \
|
||||
ir = (vm)->prog[(vm)->pc++]; \
|
||||
goto EX_ ## opcode; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define DISPATCH(opcode) \
|
||||
_Pragma("GCC diagnostic push"); \
|
||||
_Pragma("GCC diagnostic ignored \"-Wpedantic\"") \
|
||||
goto *bgp_vmOpTab[opcode]; \
|
||||
_Pragma("GCC diagnostic pop") \
|
||||
switch (opcode) // This keeps consistency with regular vm_cdef.h
|
||||
|
||||
#define EXECUTE(opcode) case BGP_VMOP_ ## opcode: EX_ ## opcode
|
||||
|
||||
#define EXECUTE_SIGILL default: EX_SIGILL
|
Reference in New Issue
Block a user