src/hotspot/cpu/s390/disassembler_s390.hpp
changeset 54960 e46fe26d7f77
parent 53244 9807daeb47c4
equal deleted inserted replaced
54959:00425a850a2f 54960:e46fe26d7f77
     1 /*
     1 /*
     2  * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * Copyright (c) 2016 SAP SE. All rights reserved.
     3  * Copyright (c) 2016, 2019 SAP SE. All rights reserved.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5  *
     5  *
     6  * This code is free software; you can redistribute it and/or modify it
     6  * This code is free software; you can redistribute it and/or modify it
     7  * under the terms of the GNU General Public License version 2 only, as
     7  * under the terms of the GNU General Public License version 2 only, as
     8  * published by the Free Software Foundation.
     8  * published by the Free Software Foundation.
    25 
    25 
    26 #ifndef CPU_S390_DISASSEMBLER_S390_HPP
    26 #ifndef CPU_S390_DISASSEMBLER_S390_HPP
    27 #define CPU_S390_DISASSEMBLER_S390_HPP
    27 #define CPU_S390_DISASSEMBLER_S390_HPP
    28 
    28 
    29   static int pd_instruction_alignment() {
    29   static int pd_instruction_alignment() {
    30     return 1;
    30     return 2;
    31   }
    31   }
    32 
    32 
    33   static const char* pd_cpu_opts() {
    33   static const char* pd_cpu_opts() {
    34     return "zarch";
    34     return "s390";
    35   }
    35   }
    36 
    36 
       
    37   static bool valid_opcodes[256];
       
    38   static bool is_valid_opcode_at(address here);
       
    39 
       
    40   // Find preceding instruction.
       
    41   //
       
    42   // Starting at the passed location, the n-th preceding (towards lower addresses)
       
    43   // location is searched, the contents of which - if interpreted as
       
    44   // instructions - has the passed location as n-th successor.
       
    45   //  - If multiple such locations exist between (here-n*instr_maxlen()) and here,
       
    46   //    the most distant location is selected.
       
    47   //  - If no such location exists, NULL is returned. The caller should then
       
    48   //    terminate its search and react properly.
       
    49   static address find_prev_instr(address here, int n_instr);
       
    50   static int     count_instr(address begin, address end);
       
    51 
       
    52   // special-case instruction decoding.
       
    53   // There may be cases where the binutils disassembler doesn't do
       
    54   // the perfect job. In those cases, decode_instruction0 may kick in
       
    55   // and do it right.
       
    56   // If nothing had to be done, just return "here", otherwise return "here + instr_len(here)"
       
    57   static address decode_instruction0(address here, outputStream* st, address virtual_begin = NULL);
       
    58 
       
    59   // platform-specific instruction annotations (like value of loaded constants)
       
    60   static void annotate(address pc, outputStream* st);
       
    61 
    37 #endif // CPU_S390_DISASSEMBLER_S390_HPP
    62 #endif // CPU_S390_DISASSEMBLER_S390_HPP