1;; Predicate definitions for eBPF. 2;; Copyright (C) 2019-2020 Free Software Foundation, Inc. 3;; 4;; This file is part of GCC. 5;; 6;; GCC is free software; you can redistribute it and/or modify 7;; it under the terms of the GNU General Public License as published by 8;; the Free Software Foundation; either version 3, or (at your option) 9;; any later version. 10;; 11;; GCC is distributed in the hope that it will be useful, 12;; but WITHOUT ANY WARRANTY; without even the implied warranty of 13;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14;; GNU General Public License for more details. 15;; 16;; You should have received a copy of the GNU General Public License 17;; along with GCC; see the file COPYING3. If not see 18;; <http://www.gnu.org/licenses/>. 19 20(define_predicate "reg_or_imm_operand" 21 (ior (and (match_code "const_int") 22 (match_test "IN_RANGE (INTVAL (op), -1 - 0x7fffffff, 0x7fffffff)")) 23 (match_operand 0 "register_operand"))) 24 25(define_predicate "imm32_operand" 26 (ior (and (match_code "const_int") 27 (match_test "IN_RANGE (INTVAL (op), 0, 0xffffffff)")) 28 (match_code "symbol_ref,label_ref,const"))) 29 30(define_predicate "lddw_operand" 31 (match_code "symbol_ref,label_ref,const,const_double,const_int")) 32 33(define_predicate "call_operand" 34 (match_code "reg,symbol_ref,const_int,const") 35{ 36 if (GET_CODE (op) == CONST) 37 { 38 op = XEXP (op, 0); 39 40 switch (GET_CODE (op)) 41 { 42 case SYMBOL_REF: 43 case LABEL_REF: 44 case CONST_INT: 45 return true; 46 break; 47 default: 48 break; 49 } 50 51 return false; 52 } 53 54 return true; 55}) 56 57(define_predicate "mov_src_operand" 58 (ior (match_operand 0 "memory_operand") 59 (match_operand 0 "reg_or_imm_operand") 60 (match_operand 0 "lddw_operand"))) 61 62(define_predicate "register_compare_operator" 63 (match_code "eq,ne,geu,gtu,ge,gt")) 64