src/hotspot/cpu/s390/assembler_s390.inline.hpp
author lucy
Wed, 04 Oct 2017 14:25:53 +0200
changeset 47585 c264868bff5b
parent 47531 6481d7b6c31e
child 47606 660175b829e8
permissions -rw-r--r--
8187969: [s390] z/Architecture Vector Facility Support. Part II Reviewed-by: mdoerr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42065
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     1
/*
47531
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
     2
 * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
     3
 * Copyright (c) 2016, 2017 SAP SE. All rights reserved.
42065
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     5
 *
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     8
 * published by the Free Software Foundation.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
     9
 *
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    14
 * accompanied this code).
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    15
 *
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    19
 *
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    22
 * questions.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    23
 *
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    24
 */
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    25
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    26
#ifndef CPU_S390_VM_ASSEMBLER_S390_INLINE_HPP
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    27
#define CPU_S390_VM_ASSEMBLER_S390_INLINE_HPP
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    28
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    29
#include "asm/assembler.inline.hpp"
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    30
#include "asm/codeBuffer.hpp"
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    31
#include "code/codeCache.hpp"
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    32
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    33
// Convention: Use Z_R0 and Z_R1 instead of Z_scratch_* in all
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    34
// assembler_s390.* files.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    35
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    36
// Local implementation of byte emitters to help inlining.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    37
inline void Assembler::emit_16(int x) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    38
  CodeSection*       cs = code_section();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    39
  address      code_pos = pc();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    40
  *(unsigned short*)code_pos = (unsigned short)x;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    41
  cs->set_end( code_pos + sizeof(unsigned short));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    42
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    43
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    44
inline void Assembler::emit_32(int x) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    45
  CodeSection*       cs = code_section();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    46
  address      code_pos = pc();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    47
  *(jint*)code_pos = (jint)x;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    48
  cs->set_end( code_pos + sizeof( jint));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    49
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    50
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    51
inline void Assembler::emit_48(long x) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    52
  CodeSection*       cs = code_section();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    53
  address      code_pos = pc();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    54
  *(unsigned short*)code_pos = (unsigned short)(x>>32);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    55
  *(jint*)(code_pos+sizeof(unsigned short)) = (jint)x;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    56
  cs->set_end( code_pos + sizeof( jint) + sizeof( unsigned short));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    57
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    58
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    59
// Support lightweight sync (from z196). Experimental as of now. For explanation see *.hpp file.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    60
inline void Assembler::z_sync() {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    61
  if (VM_Version::has_FastSync()) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    62
    z_bcr(bcondLightSync, Z_R0);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    63
  } else {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    64
    z_bcr(bcondFullSync, Z_R0);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    65
  }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    66
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    67
inline void Assembler::z_release() { }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    68
inline void Assembler::z_acquire() { }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    69
inline void Assembler::z_fence()   { z_sync(); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    70
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    71
inline void Assembler::z_illtrap() {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    72
  emit_16(0);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    73
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    74
inline void Assembler::z_illtrap(int id) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    75
  emit_16(id & 0x00ff);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    76
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    77
inline void Assembler::z_illtrap_eyecatcher(unsigned short xpattern, unsigned short pattern) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    78
  z_llill(Z_R0, xpattern);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    79
  z_iilh(Z_R0, pattern);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    80
  z_illtrap((unsigned int)xpattern);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    81
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    82
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    83
inline void Assembler::z_lhrl(Register r1, int64_t i2)  { emit_48( LHRL_ZOPC   | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    84
inline void Assembler::z_lrl(Register r1, int64_t i2)   { emit_48( LRL_ZOPC    | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    85
inline void Assembler::z_lghrl(Register r1, int64_t i2) { emit_48( LGHRL_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    86
inline void Assembler::z_lgfrl(Register r1, int64_t i2) { emit_48( LGFRL_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    87
inline void Assembler::z_lgrl(Register r1, int64_t i2)  { emit_48( LGRL_ZOPC   | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    88
inline void Assembler::z_llhrl(Register r1, int64_t i2) { emit_48( LLHRL_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    89
inline void Assembler::z_llghrl(Register r1, int64_t i2){ emit_48( LLGHRL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    90
inline void Assembler::z_llgfrl(Register r1, int64_t i2){ emit_48( LLGFRL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    91
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    92
inline void Assembler::z_sthrl(Register r1, int64_t i2) { emit_48( STHRL_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    93
inline void Assembler::z_strl(Register r1, int64_t i2)  { emit_48( STRL_ZOPC   | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    94
inline void Assembler::z_stgrl(Register r1, int64_t i2) { emit_48( STGRL_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    95
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    96
inline void Assembler::z_cksm(Register r1, Register r2) { emit_32( CKSM_ZOPC   | regt(r1, 24, 32) | regt(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    97
inline void Assembler::z_km(  Register r1, Register r2) { emit_32( KM_ZOPC     | regt(r1, 24, 32) | regt(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    98
inline void Assembler::z_kmc( Register r1, Register r2) { emit_32( KMC_ZOPC    | regt(r1, 24, 32) | regt(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
    99
inline void Assembler::z_kimd(Register r1, Register r2) { emit_32( KIMD_ZOPC   | regt(r1, 24, 32) | regt(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   100
inline void Assembler::z_klmd(Register r1, Register r2) { emit_32( KLMD_ZOPC   | regt(r1, 24, 32) | regt(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   101
inline void Assembler::z_kmac(Register r1, Register r2) { emit_32( KMAC_ZOPC   | regt(r1, 24, 32) | regt(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   102
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   103
inline void Assembler::z_exrl(Register r1, int64_t i2)  { emit_48( EXRL_ZOPC   | regt(r1, 8, 48) | simm32(i2, 16, 48)); }                             // z10
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   104
inline void Assembler::z_exrl(Register r1, address a2)  { emit_48( EXRL_ZOPC   | regt(r1, 8, 48) | simm32(RelAddr::pcrel_off32(a2, pc()), 16, 48)); } // z10
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   105
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   106
inline void Assembler::z_ectg(int64_t d1, Register b1, int64_t d2, Register b2, Register r3) { emit_48( ECTG_ZOPC | reg(r3, 8, 48) | uimm12(d1, 20, 48) | reg(b1, 16, 48) | uimm12(d2, 36, 48) | reg(b2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   107
inline void Assembler::z_ecag(Register r1, Register r3, int64_t d2, Register b2)             { emit_48( ECAG_ZOPC | reg(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | reg(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   108
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   109
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   110
//------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   111
// Interlocked-Update
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   112
//------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   113
inline void Assembler::z_laa(  Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAA_ZOPC   | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   114
inline void Assembler::z_laag( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAAG_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   115
inline void Assembler::z_laal( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAAL_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   116
inline void Assembler::z_laalg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAALG_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   117
inline void Assembler::z_lan(  Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAN_ZOPC   | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   118
inline void Assembler::z_lang( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LANG_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   119
inline void Assembler::z_lax(  Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAX_ZOPC   | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   120
inline void Assembler::z_laxg( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAXG_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   121
inline void Assembler::z_lao(  Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAO_ZOPC   | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   122
inline void Assembler::z_laog( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAOG_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   123
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   124
inline void Assembler::z_laa(  Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laa(  r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   125
inline void Assembler::z_laag( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laag( r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   126
inline void Assembler::z_laal( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laal( r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   127
inline void Assembler::z_laalg(Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laalg(r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   128
inline void Assembler::z_lan(  Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_lan(  r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   129
inline void Assembler::z_lang( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_lang( r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   130
inline void Assembler::z_lax(  Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_lax(  r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   131
inline void Assembler::z_laxg( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laxg( r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   132
inline void Assembler::z_lao(  Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_lao(  r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   133
inline void Assembler::z_laog( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laog( r1, r3, a.disp12(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   134
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   135
//--------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   136
// Execution Prediction
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   137
//--------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   138
inline void Assembler::z_pfd(  int64_t m1, int64_t d2, Register x2, Register b2) { emit_48( PFD_ZOPC   | uimm4(m1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   139
inline void Assembler::z_pfd(  int64_t m1, Address a)                            { z_pfd(m1, a.disp(), a.indexOrR0(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   140
inline void Assembler::z_pfdrl(int64_t m1, int64_t i2)                           { emit_48( PFDRL_ZOPC | uimm4(m1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   141
inline void Assembler::z_bpp(  int64_t m1, int64_t i2, int64_t d3, Register b3)  { emit_48( BPP_ZOPC   | uimm4(m1, 8, 48) | uimm12(d3, 20, 48) | reg(b3, 16, 48) | simm16(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   142
inline void Assembler::z_bprp( int64_t m1, int64_t i2, int64_t i3)               { emit_48( BPRP_ZOPC  | uimm4(m1, 8, 48) | simm12(i2, 12, 48) | simm24(i3, 24, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   143
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   144
//-------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   145
// Transaction Control
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   146
//-------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   147
inline void Assembler::z_tbegin( int64_t d1, Register b1, int64_t i2) { emit_48( TBEGIN_ZOPC  | uimm12(d1, 20, 48) | reg(b1, 16, 48) | uimm16(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   148
inline void Assembler::z_tbeginc(int64_t d1, Register b1, int64_t i2) { emit_48( TBEGINC_ZOPC | uimm12(d1, 20, 48) | reg(b1, 16, 48) | uimm16(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   149
inline void Assembler::z_tend()                                       { emit_32( TEND_ZOPC); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   150
inline void Assembler::z_tabort( int64_t d2, Register b2)             { emit_32( TABORT_ZOPC  | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   151
inline void Assembler::z_etnd(Register r1)                            { emit_32( ETND_ZOPC    | regt(r1, 24, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   152
inline void Assembler::z_ppa(Register r1, Register r2, int64_t m3)    { emit_32( PPA_ZOPC     | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   153
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   154
//---------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   155
// Conditional Execution
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   156
//---------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   157
inline void Assembler::z_locr(  Register r1, Register r2, branch_condition cc)             { emit_32( LOCR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | uimm4(cc, 16, 32)); }               // z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   158
inline void Assembler::z_locgr( Register r1, Register r2, branch_condition cc)             { emit_32( LOCGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | uimm4(cc, 16, 32)); }               // z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   159
inline void Assembler::z_loc(   Register r1, int64_t d2, Register b2, branch_condition cc) { emit_48( LOC_ZOPC   | regt(r1,  8, 48) | simm20(d2) | regz(b2, 16, 48) | uimm4(cc, 12, 48)); } // z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   160
inline void Assembler::z_locg(  Register r1, int64_t d2, Register b2, branch_condition cc) { emit_48( LOCG_ZOPC  | regt(r1,  8, 48) | simm20(d2) | regz(b2, 16, 48) | uimm4(cc, 12, 48)); } // z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   161
inline void Assembler::z_loc(   Register r1, const Address &a, branch_condition cc)        { z_loc(r1, a.disp(), a.base(), cc); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   162
inline void Assembler::z_locg(  Register r1, const Address &a, branch_condition cc)        { z_locg(r1, a.disp(), a.base(), cc); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   163
inline void Assembler::z_stoc(  Register r1, int64_t d2, Register b2, branch_condition cc) { emit_48( STOC_ZOPC  | regt(r1,  8, 48) | simm20(d2) | regz(b2, 16, 48) | uimm4(cc, 12, 48)); } // z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   164
inline void Assembler::z_stocg( Register r1, int64_t d2, Register b2, branch_condition cc) { emit_48( STOCG_ZOPC | regt(r1,  8, 48) | simm20(d2) | regz(b2, 16, 48) | uimm4(cc, 12, 48)); } // z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   165
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   166
inline void Assembler::z_srst( Register r1, Register r2) { emit_32( SRST_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   167
inline void Assembler::z_srstu(Register r1, Register r2) { emit_32( SRSTU_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   168
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   169
//---------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   170
// Address calculation
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   171
//---------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   172
inline void Assembler::z_layz(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LAY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | reg(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   173
inline void Assembler::z_lay( Register r1, const Address &a)                     { z_layz(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   174
inline void Assembler::z_lay( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LAY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   175
inline void Assembler::z_laz( Register r1, int64_t d2, Register x2, Register b2) { emit_32( LA_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   176
inline void Assembler::z_la(  Register r1, const Address &a)                     { z_laz(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   177
inline void Assembler::z_la(  Register r1, int64_t d2, Register x2, Register b2) { emit_32( LA_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   178
inline void Assembler::z_larl(Register r1, int64_t i2)    { emit_48( LARL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   179
inline void Assembler::z_larl(Register r1, address a)     { emit_48( LARL_ZOPC | regt(r1, 8, 48) | simm32(RelAddr::pcrel_off32(a, pc()), 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   180
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   181
inline void Assembler::z_lr(Register r1, Register r2)                          { emit_16( LR_ZOPC | regt(r1,8,16) | reg(r2,12,16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   182
inline void Assembler::z_lgr(Register r1, Register r2)                         { emit_32( LGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   183
inline void Assembler::z_lh(Register r1, int64_t d2, Register x2, Register b2) { emit_32( LH_ZOPC | 0 << 16 | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   184
inline void Assembler::z_lh(Register r1, const Address &a)                     { z_lh(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   185
inline void Assembler::z_l(Register r1, int64_t d2, Register x2, Register b2)  { emit_32( L_ZOPC | 0 << 16 | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   186
inline void Assembler::z_l(Register r1, const Address &a)                      { z_l(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   187
inline void Assembler::z_lg(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LG_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   188
inline void Assembler::z_lg(Register r1, const Address &a)                     { z_lg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   189
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   190
inline void Assembler::z_lbr(  Register r1, Register r2) { emit_32( LBR_ZOPC   | regt(r1, 24, 32) | reg( r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   191
inline void Assembler::z_lhr(  Register r1, Register r2) { emit_32( LHR_ZOPC   | regt(r1, 24, 32) | reg( r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   192
inline void Assembler::z_lgbr( Register r1, Register r2) { emit_32( LGBR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   193
inline void Assembler::z_lghr( Register r1, Register r2) { emit_32( LGHR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   194
inline void Assembler::z_lgfr( Register r1, Register r2) { emit_32( LGFR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   195
inline void Assembler::z_llhr( Register r1, Register r2) { emit_32( LLHR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   196
inline void Assembler::z_llgcr(Register r1, Register r2) { emit_32( LLGCR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   197
inline void Assembler::z_llghr(Register r1, Register r2) { emit_32( LLGHR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   198
inline void Assembler::z_llgfr(Register r1, Register r2) { emit_32( LLGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   199
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   200
inline void Assembler::z_sth(Register r1, const Address &a)                     { z_sth(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   201
inline void Assembler::z_sth(Register r1, int64_t d2, Register x2, Register b2) { emit_32( STH_ZOPC | reg(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   202
inline void Assembler::z_st( Register r1, const Address& d)                     { z_st(r1, d.disp(), d.indexOrR0(), d.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   203
inline void Assembler::z_st( Register r1, int64_t d2, Register x2, Register b2) { emit_32( ST_ZOPC  | reg(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   204
inline void Assembler::z_stg(Register r1, const Address& d)                     { z_stg(r1, d.disp(), d.indexOrR0(), d.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   205
inline void Assembler::z_stg(Register r1, int64_t d2, Register x2, Register b2) { emit_48( STG_ZOPC | reg(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   206
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   207
inline void Assembler::z_stcm (Register r1, int64_t m3, int64_t d2, Register b2) { emit_32( STCM_ZOPC  | regt(r1, 8, 32) | uimm4(m3, 12, 32) | uimm12(d2, 20, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   208
inline void Assembler::z_stcmy(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( STCMY_ZOPC | regt(r1, 8, 48) | uimm4(m3, 12, 48) | simm20(d2)         | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   209
inline void Assembler::z_stcmh(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( STCMH_ZOPC | regt(r1, 8, 48) | uimm4(m3, 12, 48) | simm20(d2)         | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   210
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   211
// memory-immediate instructions (8-bit immediate)
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   212
inline void Assembler::z_cli( int64_t d1, Register b1, int64_t i2) { emit_32( CLI_ZOPC  | uimm12(d1, 20, 32) | regz(b1, 16, 32) | uimm8(i2, 8, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   213
inline void Assembler::z_mvi( int64_t d1, Register b1, int64_t i2) { emit_32( MVI_ZOPC  | uimm12(d1, 20, 32) | regz(b1, 16, 32) | imm8(i2, 8, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   214
inline void Assembler::z_tm(  int64_t d1, Register b1, int64_t i2) { emit_32( TM_ZOPC   | uimm12(d1, 20, 32) | regz(b1, 16, 32) | imm8(i2, 8, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   215
inline void Assembler::z_ni(  int64_t d1, Register b1, int64_t i2) { emit_32( NI_ZOPC   | uimm12(d1, 20, 32) | regz(b1, 16, 32) | imm8(i2, 8, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   216
inline void Assembler::z_oi(  int64_t d1, Register b1, int64_t i2) { emit_32( OI_ZOPC   | uimm12(d1, 20, 32) | regz(b1, 16, 32) | imm8(i2, 8, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   217
inline void Assembler::z_xi(  int64_t d1, Register b1, int64_t i2) { emit_32( XI_ZOPC   | uimm12(d1, 20, 32) | regz(b1, 16, 32) | imm8(i2, 8, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   218
inline void Assembler::z_cliy(int64_t d1, Register b1, int64_t i2) { emit_48( CLIY_ZOPC | simm20(d1)         | regz(b1, 16, 48) | uimm8(i2, 8, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   219
inline void Assembler::z_mviy(int64_t d1, Register b1, int64_t i2) { emit_48( MVIY_ZOPC | simm20(d1)         | regz(b1, 16, 48) | imm8(i2, 8, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   220
inline void Assembler::z_tmy( int64_t d1, Register b1, int64_t i2) { emit_48( TMY_ZOPC  | simm20(d1)         | regz(b1, 16, 48) | imm8(i2, 8, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   221
inline void Assembler::z_niy( int64_t d1, Register b1, int64_t i2) { emit_48( NIY_ZOPC  | simm20(d1)         | regz(b1, 16, 48) | imm8(i2, 8, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   222
inline void Assembler::z_oiy( int64_t d1, Register b1, int64_t i2) { emit_48( OIY_ZOPC  | simm20(d1)         | regz(b1, 16, 48) | imm8(i2, 8, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   223
inline void Assembler::z_xiy( int64_t d1, Register b1, int64_t i2) { emit_48( XIY_ZOPC  | simm20(d1)         | regz(b1, 16, 48) | imm8(i2, 8, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   224
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   225
inline void Assembler::z_cli( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI");  z_cli( a.disp12(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   226
inline void Assembler::z_mvi( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI");  z_mvi( a.disp12(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   227
inline void Assembler::z_tm(  const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI");  z_tm(  a.disp12(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   228
inline void Assembler::z_ni(  const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI");  z_ni(  a.disp12(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   229
inline void Assembler::z_oi(  const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI");  z_oi(  a.disp12(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   230
inline void Assembler::z_xi(  const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI");  z_xi(  a.disp12(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   231
inline void Assembler::z_cliy(const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLIY"); z_cliy(a.disp20(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   232
inline void Assembler::z_mviy(const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in MVIY"); z_mviy(a.disp20(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   233
inline void Assembler::z_tmy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in TMY");  z_tmy( a.disp20(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   234
inline void Assembler::z_niy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in NIY");  z_niy( a.disp20(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   235
inline void Assembler::z_oiy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in OIY");  z_oiy( a.disp20(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   236
inline void Assembler::z_xiy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in XIY");  z_xiy( a.disp20(), a.base(), imm); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   237
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   238
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   239
inline void Assembler::z_mvc(const Address& d, const Address& s, int64_t l) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   240
  assert(!d.has_index() && !s.has_index(), "Address operand can not be encoded.");
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   241
  z_mvc(d.disp(), l-1, d.base(), s.disp(), s.base());
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   242
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   243
inline void Assembler::z_mvc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( MVC_ZOPC | uimm12(d1, 20, 48) | uimm8(l, 8, 48) | regz(b1, 16, 48) | uimm12(d2, 36, 48) | regz(b2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   244
inline void Assembler::z_mvcle(Register r1, Register r3, int64_t d2, Register b2) { emit_32( MVCLE_ZOPC | reg(r1, 8, 32) | reg(r3, 12, 32) | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   245
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   246
inline void Assembler::z_mvhhi( int64_t d1, Register b1, int64_t i2) { emit_48( MVHHI_ZOPC | uimm12( d1, 20, 48) | regz(b1, 16, 48) | simm16(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   247
inline void Assembler::z_mvhi ( int64_t d1, Register b1, int64_t i2) { emit_48( MVHI_ZOPC  | uimm12( d1, 20, 48) | regz(b1, 16, 48) | simm16(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   248
inline void Assembler::z_mvghi( int64_t d1, Register b1, int64_t i2) { emit_48( MVGHI_ZOPC | uimm12( d1, 20, 48) | regz(b1, 16, 48) | simm16(i2, 32, 48)); }
46953
39063b484ec2 8186611: s390: Add missing compiler barriers and fix assembler
mdoerr
parents: 42897
diff changeset
   249
inline void Assembler::z_mvhhi( const Address &d, int64_t i2) { assert(!d.has_index(), " no index reg allowed in MVHHI"); z_mvhhi( d.disp(), d.baseOrR0(), i2); }
39063b484ec2 8186611: s390: Add missing compiler barriers and fix assembler
mdoerr
parents: 42897
diff changeset
   250
inline void Assembler::z_mvhi ( const Address &d, int64_t i2) { assert(!d.has_index(), " no index reg allowed in MVHI");  z_mvhi(  d.disp(), d.baseOrR0(), i2); }
42065
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   251
inline void Assembler::z_mvghi( const Address &d, int64_t i2) { assert(!d.has_index(), " no index reg allowed in MVGHI"); z_mvghi( d.disp(), d.baseOrR0(), i2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   252
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   253
inline void Assembler::z_ex(Register r1, int64_t d2, Register x2, Register b2) { emit_32( EX_ZOPC | regz(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   254
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   255
inline void Assembler::z_ic  (Register r1, int64_t d2, Register x2, Register b2) { emit_32( IC_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   256
inline void Assembler::z_icy (Register r1, int64_t d2, Register x2, Register b2) { emit_48( ICY_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   257
inline void Assembler::z_icm (Register r1, int64_t m3, int64_t d2, Register b2) { emit_32( ICM_ZOPC  | regt(r1, 8, 32) | uimm4(m3, 12, 32) | uimm12(d2, 20, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   258
inline void Assembler::z_icmy(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( ICMY_ZOPC | regt(r1, 8, 48) | uimm4(m3, 12, 48) | simm20(d2)         | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   259
inline void Assembler::z_icmh(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( ICMH_ZOPC | regt(r1, 8, 48) | uimm4(m3, 12, 48) | simm20(d2)         | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   260
inline void Assembler::z_iihh(Register r1, int64_t i2) { emit_32( IIHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   261
inline void Assembler::z_iihl(Register r1, int64_t i2) { emit_32( IIHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   262
inline void Assembler::z_iilh(Register r1, int64_t i2) { emit_32( IILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   263
inline void Assembler::z_iill(Register r1, int64_t i2) { emit_32( IILL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   264
inline void Assembler::z_iihf(Register r1, int64_t i2) { emit_48( IIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   265
inline void Assembler::z_iilf(Register r1, int64_t i2) { emit_48( IILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   266
inline void Assembler::z_lgf(Register r1, const Address& a) { z_lgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   267
inline void Assembler::z_lgf(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LGF_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   268
inline void Assembler::z_lhy(Register r1, const Address &a) { z_lhy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   269
inline void Assembler::z_lhy(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LHY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   270
inline void Assembler::z_lgh(Register r1, const Address &a) { z_lgh(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   271
inline void Assembler::z_lgh(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LGH_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   272
inline void Assembler::z_lt(Register r1, const Address &a) { z_lt(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   273
inline void Assembler::z_lt (Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LT_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   274
inline void Assembler::z_ltg(Register r1, const Address &a) { z_ltg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   275
inline void Assembler::z_ltg(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LTG_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   276
inline void Assembler::z_ltgf(Register r1, const Address &a) { z_ltgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   277
inline void Assembler::z_ltgf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LTGF_ZOPC| regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   278
inline void Assembler::z_lb(Register r1, const Address &a) { z_lb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   279
inline void Assembler::z_lb (Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LB_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   280
inline void Assembler::z_lgb(Register r1, const Address &a) { z_lgb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   281
inline void Assembler::z_lgb(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LGB_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   282
inline void Assembler::z_ly(Register r1, const Address &a) { z_ly(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   283
inline void Assembler::z_ly(Register r1, int64_t d2, Register x2, Register b2)   { emit_48( LY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   284
inline void Assembler::z_llc(Register r1, const Address& a) { z_llc(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   285
inline void Assembler::z_llc(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LLC_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   286
inline void Assembler::z_llh(Register r1, const Address &a) { z_llh(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   287
inline void Assembler::z_llh(Register r1, int64_t d2, Register x2, Register b2)  { emit_48( LLH_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   288
inline void Assembler::z_llgf(Register r1, const Address &a) { z_llgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   289
inline void Assembler::z_llgf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LLGF_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   290
inline void Assembler::z_llgh(Register r1, const Address &a) { z_llgh(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   291
inline void Assembler::z_llgh(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LLGH_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   292
inline void Assembler::z_llgc(Register r1, const Address &a) { z_llgc(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   293
inline void Assembler::z_llgc(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LLGC_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   294
inline void Assembler::z_llgc(Register r1, int64_t d2, Register b2)              { z_llgc( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   295
inline void Assembler::z_lhi(Register r1, int64_t i2) { emit_32( LHI_ZOPC | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   296
inline void Assembler::z_lghi(Register r1, int64_t i2) { emit_32( LGHI_ZOPC | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   297
inline void Assembler::z_lgfi(Register r1, int64_t i2) { emit_48( LGFI_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   298
inline void Assembler::z_llihf(Register r1, int64_t i2) { emit_48( LLIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   299
inline void Assembler::z_llilf(Register r1, int64_t i2) { emit_48( LLILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   300
inline void Assembler::z_llihh(Register r1, int64_t i2) { emit_32( LLIHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   301
inline void Assembler::z_llihl(Register r1, int64_t i2) { emit_32( LLIHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   302
inline void Assembler::z_llilh(Register r1, int64_t i2) { emit_32( LLILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   303
inline void Assembler::z_llill(Register r1, int64_t i2) { emit_32( LLILL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   304
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   305
// allow "monadic" use
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   306
inline void Assembler::z_lcr(  Register r1, Register r2) { emit_16( LCR_ZOPC   | regt( r1,  8, 16) | reg((r2 == noreg) ? r1:r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   307
inline void Assembler::z_lcgr( Register r1, Register r2) { emit_32( LCGR_ZOPC  | regt( r1, 24, 32) | reg((r2 == noreg) ? r1:r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   308
inline void Assembler::z_lcgfr(Register r1, Register r2) { emit_32( LCGFR_ZOPC | regt( r1, 24, 32) | reg((r2 == noreg) ? r1:r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   309
inline void Assembler::z_lnr(  Register r1, Register r2) { emit_16( LNR_ZOPC   | regt( r1,  8, 16) | reg((r2 == noreg) ? r1:r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   310
inline void Assembler::z_lngr( Register r1, Register r2) { emit_32( LNGR_ZOPC  | regt( r1, 24, 32) | reg((r2 == noreg) ? r1:r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   311
inline void Assembler::z_lngfr(Register r1, Register r2) { emit_32( LNGFR_ZOPC | regt( r1, 24, 32) | reg((r2 == noreg) ? r1:r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   312
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   313
inline void Assembler::z_lrvr( Register r1, Register r2) { emit_32( LRVR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   314
inline void Assembler::z_lrvgr(Register r1, Register r2) { emit_32( LRVGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   315
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   316
inline void Assembler::z_ltr(  Register r1, Register r2) { emit_16( LTR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   317
inline void Assembler::z_ltgr( Register r1, Register r2) { emit_32( LTGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   318
inline void Assembler::z_ltgfr(Register r1, Register r2) { emit_32( LTGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   319
inline void Assembler::z_stc(  Register r1, const Address &a) { z_stc(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   320
inline void Assembler::z_stc(  Register r1, int64_t d2, Register x2, Register b2) { emit_32( STC_ZOPC | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   321
inline void Assembler::z_stcy( Register r1, const Address &a) { z_stcy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   322
inline void Assembler::z_stcy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( STCY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   323
inline void Assembler::z_sthy( Register r1, const Address &a) { z_sthy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   324
inline void Assembler::z_sthy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( STHY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   325
inline void Assembler::z_sty(  Register r1, const Address &a) { z_sty(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   326
inline void Assembler::z_sty(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( STY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   327
inline void Assembler::z_stfle(int64_t d2, Register b2) { emit_32(STFLE_ZOPC | uimm12(d2,20,32) | regz(b2,16,32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   328
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   329
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   330
//-----------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   331
// SHIFT/RORATE OPERATIONS
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   332
//-----------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   333
inline void Assembler::z_sla( Register r1,              int64_t d2, Register b2) { emit_32( SLA_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   334
inline void Assembler::z_slag(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SLAG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(b2, 16, 48) | reg(r3, 12, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   335
inline void Assembler::z_sra( Register r1,              int64_t d2, Register b2) { emit_32( SRA_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   336
inline void Assembler::z_srag(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SRAG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(b2, 16, 48) | reg(r3, 12, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   337
inline void Assembler::z_sll( Register r1,              int64_t d2, Register b2) { emit_32( SLL_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   338
inline void Assembler::z_sllg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SLLG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(b2, 16, 48) | reg(r3, 12, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   339
inline void Assembler::z_srl( Register r1,              int64_t d2, Register b2) { emit_32( SRL_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   340
inline void Assembler::z_srlg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SRLG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(b2, 16, 48) | reg(r3, 12, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   341
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   342
// rotate left
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   343
inline void Assembler::z_rll( Register r1, Register r3, int64_t d2, Register b2) { emit_48( RLL_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | reg(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   344
inline void Assembler::z_rllg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( RLLG_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | simm20(d2) | reg(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   345
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   346
// Rotate the AND/XOR/OR/insert
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   347
inline void Assembler::z_rnsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only) { // Rotate then AND selected bits.  -- z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   348
  const int64_t len = 48;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   349
  assert(Immediate::is_uimm(spos3, 6), "range start out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   350
  assert(Immediate::is_uimm(epos4, 6), "range end   out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   351
  assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   352
  emit_48( RNSBG_ZOPC | regt(r1, 8, len) | regt(r2, 12, len) | uimm6(spos3, 16+2, len) | uimm6(epos4, 24+2, len) | uimm6(nrot5, 32+2, len) | u_field(test_only ? 1 : 0, len-16-1, len-16-1));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   353
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   354
inline void Assembler::z_rxsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only) { // Rotate then XOR selected bits.  -- z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   355
  const int64_t len = 48;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   356
  assert(Immediate::is_uimm(spos3, 6), "range start out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   357
  assert(Immediate::is_uimm(epos4, 6), "range end   out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   358
  assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   359
  emit_48( RXSBG_ZOPC | regt(r1, 8, len) | regt(r2, 12, len) | uimm6(spos3, 16+2, len) | uimm6(epos4, 24+2, len) | uimm6(nrot5, 32+2, len) | u_field(test_only ? 1 : 0, len-16-1, len-16-1));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   360
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   361
inline void Assembler::z_rosbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only) { // Rotate then OR selected bits.  -- z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   362
  const int64_t len = 48;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   363
  assert(Immediate::is_uimm(spos3, 6), "range start out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   364
  assert(Immediate::is_uimm(epos4, 6), "range end   out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   365
  assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   366
  emit_48( ROSBG_ZOPC | regt(r1, 8, len) | regt(r2, 12, len) | uimm6(spos3, 16+2, len) | uimm6(epos4, 24+2, len) | uimm6(nrot5, 32+2, len) | u_field(test_only ? 1 : 0, len-16-1, len-16-1));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   367
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   368
inline void Assembler::z_risbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool zero_rest) { // Rotate then INS selected bits.  -- z196
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   369
  const int64_t len = 48;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   370
  assert(Immediate::is_uimm(spos3, 6), "range start out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   371
  assert(Immediate::is_uimm(epos4, 6), "range end   out of range");   // Could just trim to 6bits wide w/o assertion.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   372
  assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   373
  emit_48( RISBG_ZOPC | regt(r1, 8, len) | regt(r2, 12, len) | uimm6(spos3, 16+2, len) | uimm6(epos4, 24+2, len) | uimm6(nrot5, 32+2, len) | u_field(zero_rest ? 1 : 0, len-24-1, len-24-1));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   374
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   375
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   376
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   377
//------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   378
// LOGICAL OPERATIONS
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   379
//------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   380
inline void Assembler::z_n(   Register r1, int64_t d2, Register x2, Register b2) { emit_32( N_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   381
inline void Assembler::z_ny(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( NY_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   382
inline void Assembler::z_ng(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( NG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   383
inline void Assembler::z_n(   Register r1, const Address& a) { z_n( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   384
inline void Assembler::z_ny(  Register r1, const Address& a) { z_ny(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   385
inline void Assembler::z_ng(  Register r1, const Address& a) { z_ng(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   386
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   387
inline void Assembler::z_nr(  Register r1, Register r2)              { emit_16( NR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   388
inline void Assembler::z_ngr( Register r1, Register r2)              { emit_32( NGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   389
inline void Assembler::z_nrk( Register r1, Register r2, Register r3) { emit_32( NRK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   390
inline void Assembler::z_ngrk(Register r1, Register r2, Register r3) { emit_32( NGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   391
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   392
inline void Assembler::z_nihh(Register r1, int64_t i2) { emit_32( NIHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   393
inline void Assembler::z_nihl(Register r1, int64_t i2) { emit_32( NIHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   394
inline void Assembler::z_nilh(Register r1, int64_t i2) { emit_32( NILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   395
inline void Assembler::z_nill(Register r1, int64_t i2) { emit_32( NILL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   396
inline void Assembler::z_nihf(Register r1, int64_t i2) { emit_48( NIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   397
inline void Assembler::z_nilf(Register r1, int64_t i2) { emit_48( NILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   398
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   399
inline void Assembler::z_o(   Register r1, int64_t d2, Register x2, Register b2) { emit_32( O_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   400
inline void Assembler::z_oy(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( OY_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   401
inline void Assembler::z_og(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( OG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   402
inline void Assembler::z_o(   Register r1, const Address& a) { z_o( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   403
inline void Assembler::z_oy(  Register r1, const Address& a) { z_oy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   404
inline void Assembler::z_og(  Register r1, const Address& a) { z_og(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   405
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   406
inline void Assembler::z_or(  Register r1, Register r2)              { emit_16( OR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   407
inline void Assembler::z_ogr( Register r1, Register r2)              { emit_32( OGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   408
inline void Assembler::z_ork( Register r1, Register r2, Register r3) { emit_32( ORK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   409
inline void Assembler::z_ogrk(Register r1, Register r2, Register r3) { emit_32( OGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   410
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   411
inline void Assembler::z_oihh(Register r1, int64_t i2) { emit_32( OIHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   412
inline void Assembler::z_oihl(Register r1, int64_t i2) { emit_32( OIHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   413
inline void Assembler::z_oilh(Register r1, int64_t i2) { emit_32( OILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   414
inline void Assembler::z_oill(Register r1, int64_t i2) { emit_32( OILL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   415
inline void Assembler::z_oihf(Register r1, int64_t i2) { emit_48( OIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   416
inline void Assembler::z_oilf(Register r1, int64_t i2) { emit_48( OILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   417
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   418
inline void Assembler::z_x(   Register r1, int64_t d2, Register x2, Register b2) { emit_32( X_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   419
inline void Assembler::z_xy(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( XY_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   420
inline void Assembler::z_xg(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( XG_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   421
inline void Assembler::z_x(   Register r1, const Address& a) { z_x( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   422
inline void Assembler::z_xy(  Register r1, const Address& a) { z_xy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   423
inline void Assembler::z_xg(  Register r1, const Address& a) { z_xg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   424
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   425
inline void Assembler::z_xr(  Register r1, Register r2)              { emit_16( XR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   426
inline void Assembler::z_xgr( Register r1, Register r2)              { emit_32( XGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   427
inline void Assembler::z_xrk( Register r1, Register r2, Register r3) { emit_32( XRK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   428
inline void Assembler::z_xgrk(Register r1, Register r2, Register r3) { emit_32( XGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   429
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   430
inline void Assembler::z_xihf(Register r1, int64_t i2) { emit_48( XIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   431
inline void Assembler::z_xilf(Register r1, int64_t i2) { emit_48( XILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   432
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   433
inline void Assembler::z_nc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( NC_ZOPC | uimm12(d1, 20, 48) | uimm8(l, 8, 48) | regz(b1, 16, 48) | uimm12(d2, 36, 48) | regz(b2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   434
inline void Assembler::z_oc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( OC_ZOPC | uimm12(d1, 20, 48) | uimm8(l, 8, 48) | regz(b1, 16, 48) | uimm12(d2, 36, 48) | regz(b2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   435
inline void Assembler::z_xc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( XC_ZOPC | uimm12(d1, 20, 48) | uimm8(l, 8, 48) | regz(b1, 16, 48) | uimm12(d2, 36, 48) | regz(b2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   436
inline void Assembler::z_nc(Address dst, int64_t len, Address src2) { assert(!dst.has_index() && !src2.has_index(), "Cannot encode index"); z_nc(dst.disp12(), len-1, dst.base(), src2.disp12(), src2.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   437
inline void Assembler::z_oc(Address dst, int64_t len, Address src2) { assert(!dst.has_index() && !src2.has_index(), "Cannot encode index"); z_oc(dst.disp12(), len-1, dst.base(), src2.disp12(), src2.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   438
inline void Assembler::z_xc(Address dst, int64_t len, Address src2) { assert(!dst.has_index() && !src2.has_index(), "Cannot encode index"); z_xc(dst.disp12(), len-1, dst.base(), src2.disp12(), src2.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   439
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   440
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   441
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   442
// ADD
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   443
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   444
inline void Assembler::z_a(   Register r1, int64_t d2, Register x2, Register b2) { emit_32( A_ZOPC    | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   445
inline void Assembler::z_ay(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( AY_ZOPC   | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   446
inline void Assembler::z_al(  Register r1, int64_t d2, Register x2, Register b2) { emit_32( AL_ZOPC   | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   447
inline void Assembler::z_aly( Register r1, int64_t d2, Register x2, Register b2) { emit_48( ALY_ZOPC  | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   448
inline void Assembler::z_ag(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( AG_ZOPC   | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   449
inline void Assembler::z_agf( Register r1, int64_t d2, Register x2, Register b2) { emit_48( AGF_ZOPC  | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   450
inline void Assembler::z_alg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( ALG_ZOPC  | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   451
inline void Assembler::z_algf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( ALGF_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   452
inline void Assembler::z_a(   Register r1, const Address& a) { z_a(   r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   453
inline void Assembler::z_ay(  Register r1, const Address& a) { z_ay(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   454
inline void Assembler::z_al(  Register r1, const Address& a) { z_al(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   455
inline void Assembler::z_aly( Register r1, const Address& a) { z_aly( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   456
inline void Assembler::z_ag(  Register r1, const Address& a) { z_ag(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   457
inline void Assembler::z_agf( Register r1, const Address& a) { z_agf( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   458
inline void Assembler::z_alg( Register r1, const Address& a) { z_alg( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   459
inline void Assembler::z_algf(Register r1, const Address& a) { z_algf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   460
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   461
inline void Assembler::z_ar(  Register r1, Register r2) { emit_16( AR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   462
inline void Assembler::z_agr( Register r1, Register r2) { emit_32( AGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   463
inline void Assembler::z_agfr(Register r1, Register r2) { emit_32( AGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   464
inline void Assembler::z_ark( Register r1, Register r2, Register r3) { emit_32( ARK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   465
inline void Assembler::z_agrk(Register r1, Register r2, Register r3) { emit_32( AGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   466
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   467
inline void Assembler::z_ahi(  Register r1, int64_t i2) { emit_32( AHI_ZOPC  | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   468
inline void Assembler::z_afi(  Register r1, int64_t i2) { emit_48( AFI_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   469
inline void Assembler::z_aghi( Register r1, int64_t i2) { emit_32( AGHI_ZOPC | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   470
inline void Assembler::z_agfi( Register r1, int64_t i2) { emit_48( AGFI_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   471
inline void Assembler::z_aih(  Register r1, int64_t i2) { emit_48( AIH_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   472
inline void Assembler::z_ahik( Register r1, Register r3, int64_t i2) { emit_48( AHIK_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm16(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   473
inline void Assembler::z_aghik(Register r1, Register r3, int64_t i2) { emit_48( AGHIK_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | simm16(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   474
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   475
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   476
//-----------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   477
// ADD LOGICAL
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   478
//-----------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   479
inline void Assembler::z_alr(  Register r1, Register r2) { emit_16( ALR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   480
inline void Assembler::z_algr( Register r1, Register r2) { emit_32( ALGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   481
inline void Assembler::z_algfr(Register r1, Register r2) { emit_32( ALGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   482
inline void Assembler::z_alrk( Register r1, Register r2, Register r3) { emit_32( ALRK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   483
inline void Assembler::z_algrk(Register r1, Register r2, Register r3) { emit_32( ALGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   484
inline void Assembler::z_alcgr(Register r1, Register r2) { emit_32( ALCGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   485
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   486
inline void Assembler::z_alfi( Register r1, int64_t i2) { emit_48( ALFI_ZOPC |  regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   487
inline void Assembler::z_algfi(Register r1, int64_t i2) { emit_48( ALGFI_ZOPC | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   488
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   489
inline void Assembler::z_alhsik( Register r1, Register r3, int64_t i2) { emit_48( ALHSIK_ZOPC  | regt(r1, 8, 48) | reg(r3, 12, 48) | simm16(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   490
inline void Assembler::z_alghsik(Register r1, Register r3, int64_t i2) { emit_48( ALGHSIK_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | simm16(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   491
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   492
// In-memory arithmetic (add signed, add logical with signed immediate)
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   493
inline void Assembler::z_asi(  int64_t d1, Register b1, int64_t i2) { emit_48( ASI_ZOPC   | simm8(i2, 8, 48) | simm20(d1) | regz(b1, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   494
inline void Assembler::z_agsi( int64_t d1, Register b1, int64_t i2) { emit_48( AGSI_ZOPC  | simm8(i2, 8, 48) | simm20(d1) | regz(b1, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   495
inline void Assembler::z_alsi( int64_t d1, Register b1, int64_t i2) { emit_48( ALSI_ZOPC  | simm8(i2, 8, 48) | simm20(d1) | regz(b1, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   496
inline void Assembler::z_algsi(int64_t d1, Register b1, int64_t i2) { emit_48( ALGSI_ZOPC | simm8(i2, 8, 48) | simm20(d1) | regz(b1, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   497
inline void Assembler::z_asi(  const Address& d, int64_t i2) { assert(!d.has_index(), "No index in ASI");   z_asi(  d.disp(), d.base(), i2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   498
inline void Assembler::z_agsi( const Address& d, int64_t i2) { assert(!d.has_index(), "No index in AGSI");  z_agsi( d.disp(), d.base(), i2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   499
inline void Assembler::z_alsi( const Address& d, int64_t i2) { assert(!d.has_index(), "No index in ALSI");  z_alsi( d.disp(), d.base(), i2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   500
inline void Assembler::z_algsi(const Address& d, int64_t i2) { assert(!d.has_index(), "No index in ALGSI"); z_algsi(d.disp(), d.base(), i2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   501
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   502
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   503
//--------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   504
// SUBTRACT
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   505
//--------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   506
inline void Assembler::z_s(   Register r1, int64_t d2, Register x2, Register b2) { emit_32( S_ZOPC    | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   507
inline void Assembler::z_sy(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( SY_ZOPC   | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   508
inline void Assembler::z_sg(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( SG_ZOPC   | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   509
inline void Assembler::z_sgf( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SGF_ZOPC  | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   510
inline void Assembler::z_slg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SLG_ZOPC  | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   511
inline void Assembler::z_slgf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( SLGF_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   512
inline void Assembler::z_s(   Register r1, const Address& a) { z_s(   r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   513
inline void Assembler::z_sy(  Register r1, const Address& a) { z_sy(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   514
inline void Assembler::z_sg(  Register r1, const Address& a) { z_sg(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   515
inline void Assembler::z_sgf( Register r1, const Address& a) { z_sgf( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   516
inline void Assembler::z_slg( Register r1, const Address& a) { z_slg( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   517
inline void Assembler::z_slgf(Register r1, const Address& a) { z_slgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   518
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   519
inline void Assembler::z_sr(  Register r1, Register r2) { emit_16( SR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   520
inline void Assembler::z_sgr( Register r1, Register r2) { emit_32( SGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   521
inline void Assembler::z_sgfr(Register r1, Register r2) { emit_32( SGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   522
inline void Assembler::z_srk( Register r1, Register r2, Register r3) { emit_32( SRK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   523
inline void Assembler::z_sgrk(Register r1, Register r2, Register r3) { emit_32( SGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   524
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   525
inline void Assembler::z_sh(  Register r1, int64_t d2, Register x2, Register b2) { emit_32( SH_ZOPC  | regt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   526
inline void Assembler::z_shy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SHY_ZOPC | regt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   527
inline void Assembler::z_sh(  Register r1, const Address &a) { z_sh( r1, a.disp(), a.indexOrR0(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   528
inline void Assembler::z_shy( Register r1, const Address &a) { z_shy(r1, a.disp(), a.indexOrR0(), a.base()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   529
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   530
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   531
//----------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   532
// SUBTRACT LOGICAL
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   533
//----------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   534
inline void Assembler::z_slr(  Register r1, Register r2) { emit_16( SLR_ZOPC   | regt(r1,  8, 16) | reg(r2, 12, 16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   535
inline void Assembler::z_slgr( Register r1, Register r2) { emit_32( SLGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   536
inline void Assembler::z_slgfr(Register r1, Register r2) { emit_32( SLGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   537
inline void Assembler::z_slrk( Register r1, Register r2, Register r3) { emit_32(SLRK_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   538
inline void Assembler::z_slgrk(Register r1, Register r2, Register r3) { emit_32(SLGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   539
inline void Assembler::z_slfi( Register r1, int64_t i2) { emit_48( SLFI_ZOPC  | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   540
inline void Assembler::z_slgfi(Register r1, int64_t i2) { emit_48( SLGFI_ZOPC | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   541
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   542
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   543
//--------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   544
// MULTIPLY
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   545
//--------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   546
inline void Assembler::z_msr(  Register r1, Register r2) { emit_32( MSR_ZOPC   | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   547
inline void Assembler::z_msgr( Register r1, Register r2) { emit_32( MSGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   548
inline void Assembler::z_msgfr(Register r1, Register r2) { emit_32( MSGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   549
inline void Assembler::z_mlr(  Register r1, Register r2) { emit_32( MLR_ZOPC   | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   550
inline void Assembler::z_mlgr( Register r1, Register r2) { emit_32( MLGR_ZOPC  | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   551
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   552
inline void Assembler::z_mhy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( MHY_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   553
inline void Assembler::z_msy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( MSY_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   554
inline void Assembler::z_msg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( MSG_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   555
inline void Assembler::z_msgf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( MSGF_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   556
inline void Assembler::z_ml(  Register r1, int64_t d2, Register x2, Register b2) { emit_48( ML_ZOPC   | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   557
inline void Assembler::z_mlg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( MLG_ZOPC  | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   558
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   559
inline void Assembler::z_mhy( Register r1, const Address& a) { z_mhy( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   560
inline void Assembler::z_msy( Register r1, const Address& a) { z_msy( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   561
inline void Assembler::z_msg( Register r1, const Address& a) { z_msg( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   562
inline void Assembler::z_msgf(Register r1, const Address& a) { z_msgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   563
inline void Assembler::z_ml(  Register r1, const Address& a) { z_ml(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   564
inline void Assembler::z_mlg( Register r1, const Address& a) { z_mlg( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   565
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   566
inline void Assembler::z_msfi( Register r1, int64_t i2) { emit_48( MSFI_ZOPC  | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   567
inline void Assembler::z_msgfi(Register r1, int64_t i2) { emit_48( MSGFI_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   568
inline void Assembler::z_mhi(  Register r1, int64_t i2) { emit_32( MHI_ZOPC   | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   569
inline void Assembler::z_mghi( Register r1, int64_t i2) { emit_32( MGHI_ZOPC  | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   570
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   571
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   572
//------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   573
// DIVIDE
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   574
//------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   575
inline void Assembler::z_dsgr( Register r1, Register r2) { emit_32( DSGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   576
inline void Assembler::z_dsgfr(Register r1, Register r2) { emit_32( DSGFR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   577
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   578
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   579
//-------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   580
// COMPARE
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   581
//-------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   582
inline void Assembler::z_cr(  Register r1, Register r2) { emit_16( CR_ZOPC   | reg(r1,  8, 16) | reg(r2,12,16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   583
inline void Assembler::z_cgr( Register r1, Register r2) { emit_32( CGR_ZOPC  | reg(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   584
inline void Assembler::z_cgfr(Register r1, Register r2) { emit_32( CGFR_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   585
inline void Assembler::z_chi( Register r1, int64_t i2)  { emit_32( CHI_ZOPC  | reg(r1,  8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   586
inline void Assembler::z_cghi(Register r1, int64_t i2)  { emit_32( CGHI_ZOPC | reg(r1,  8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   587
inline void Assembler::z_cfi( Register r1, int64_t i2)  { emit_48( CFI_ZOPC  | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   588
inline void Assembler::z_cgfi(Register r1, int64_t i2)  { emit_48( CGFI_ZOPC | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   589
inline void Assembler::z_ch(Register r1, const Address &a) { z_ch(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   590
inline void Assembler::z_ch(Register r1, int64_t d2, Register x2, Register b2) { emit_32( CH_ZOPC | reg(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   591
inline void Assembler::z_c(Register r1, const Address &a) { z_c(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   592
inline void Assembler::z_c(Register r1,  int64_t d2, Register x2, Register b2) { emit_32( C_ZOPC  | reg(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   593
inline void Assembler::z_cy(Register r1, const Address &a) { z_cy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   594
inline void Assembler::z_cy(Register r1, int64_t d2, Register x2, Register b2) { emit_48( CY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   595
inline void Assembler::z_cy(Register r1, int64_t d2, Register b2) { z_cy(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   596
inline void Assembler::z_cg(Register r1, const Address &a) { z_cg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   597
inline void Assembler::z_cg(Register r1, int64_t d2, Register x2, Register b2) { emit_48( CG_ZOPC | reg(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   598
inline void Assembler::z_clr(Register r1, Register r2) { emit_16( CLR_ZOPC | reg(r1,8,16) | reg(r2,12,16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   599
inline void Assembler::z_clgr(Register r1, Register r2) { emit_32( CLGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   600
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   601
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   602
inline void Assembler::z_clfi(Register r1, int64_t i2)  { emit_48( CLFI_ZOPC  | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   603
inline void Assembler::z_clgfi(Register r1, int64_t i2) { emit_48( CLGFI_ZOPC | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   604
inline void Assembler::z_cl(Register r1, const Address &a) { z_cl(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   605
inline void Assembler::z_cl(Register r1, int64_t d2, Register x2, Register b2) { emit_32( CL_ZOPC | regt(r1, 8, 32) | uimm12(d2,20,32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   606
inline void Assembler::z_cly(Register r1, const Address &a) { z_cly(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   607
inline void Assembler::z_cly(Register r1, int64_t d2, Register x2, Register b2) { emit_48( CLY_ZOPC | regt(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   608
inline void Assembler::z_cly(Register r1, int64_t d2, Register b2) { z_cly(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   609
inline void Assembler::z_clg(Register r1, const Address &a) { z_clg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   610
inline void Assembler::z_clg(Register r1, int64_t d2, Register x2, Register b2) { emit_48( CLG_ZOPC | reg(r1, 8, 48) | simm20(d2) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   611
inline void Assembler::z_clc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( CLC_ZOPC | uimm12(d1, 20, 48) | uimm8(l, 8, 48) | regz(b1, 16, 48) | uimm12(d2, 36, 48) | regz(b2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   612
inline void Assembler::z_clcle(Register r1, Register r3, int64_t d2, Register b2) { emit_32( CLCLE_ZOPC | reg(r1, 8, 32) | reg(r3, 12, 32) | uimm12(d2, 20, 32) | reg(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   613
inline void Assembler::z_clclu(Register r1, Register r3, int64_t d2, Register b2) { emit_48( CLCLU_ZOPC | reg(r1, 8, 48) | reg(r3, 12, 48) | uimm12(d2, 20, 48) | reg(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   614
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   615
inline void Assembler::z_tmll(Register r1, int64_t i2) { emit_32( TMLL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   616
inline void Assembler::z_tmlh(Register r1, int64_t i2) { emit_32( TMLH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   617
inline void Assembler::z_tmhl(Register r1, int64_t i2) { emit_32( TMHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   618
inline void Assembler::z_tmhh(Register r1, int64_t i2) { emit_32( TMHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   619
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   620
// translate characters
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   621
inline void Assembler::z_troo(Register r1, Register r2, int64_t m3) { emit_32( TROO_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   622
inline void Assembler::z_trot(Register r1, Register r2, int64_t m3) { emit_32( TROT_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   623
inline void Assembler::z_trto(Register r1, Register r2, int64_t m3) { emit_32( TRTO_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   624
inline void Assembler::z_trtt(Register r1, Register r2, int64_t m3) { emit_32( TRTT_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   625
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   626
// signed comparison
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   627
inline void Assembler::z_crb(Register r1,  Register r2, branch_condition m3, int64_t d4, Register b4) { emit_48( CRB_ZOPC  | reg(r1, 8, 48) | reg(r2, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   628
inline void Assembler::z_cgrb(Register r1, Register r2, branch_condition m3, int64_t d4, Register b4) { emit_48( CGRB_ZOPC | reg(r1, 8, 48) | reg(r2, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   629
inline void Assembler::z_crj(Register r1,  Register r2, branch_condition m3, address a4)              { emit_48( CRJ_ZOPC  | reg(r1, 8, 48) | reg(r2, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   630
inline void Assembler::z_cgrj(Register r1, Register r2, branch_condition m3, address a4)              { emit_48( CGRJ_ZOPC | reg(r1, 8, 48) | reg(r2, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   631
inline void Assembler::z_cib(Register r1,  int64_t i2, branch_condition m3, int64_t d4, Register b4)  { emit_48( CIB_ZOPC  | reg(r1, 8, 48) | uimm4(m3, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | simm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   632
inline void Assembler::z_cgib(Register r1, int64_t i2, branch_condition m3, int64_t d4, Register b4)  { emit_48( CGIB_ZOPC | reg(r1, 8, 48) | uimm4(m3, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | simm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   633
inline void Assembler::z_cij(Register r1,  int64_t i2, branch_condition m3, address a4)               { emit_48( CIJ_ZOPC  | reg(r1, 8, 48) | uimm4(m3, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | simm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   634
inline void Assembler::z_cgij(Register r1, int64_t i2, branch_condition m3, address a4)               { emit_48( CGIJ_ZOPC | reg(r1, 8, 48) | uimm4(m3, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | simm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   635
// unsigned comparison
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   636
inline void Assembler::z_clrb(Register r1,  Register r2, branch_condition m3, int64_t d4, Register b4) { emit_48( CLRB_ZOPC  | reg(r1, 8, 48) | reg(r2, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   637
inline void Assembler::z_clgrb(Register r1, Register r2, branch_condition m3, int64_t d4, Register b4) { emit_48( CLGRB_ZOPC | reg(r1, 8, 48) | reg(r2, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   638
inline void Assembler::z_clrj(Register r1,  Register r2, branch_condition m3, address a4)              { emit_48( CLRJ_ZOPC  | reg(r1, 8, 48) | reg(r2, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   639
inline void Assembler::z_clgrj(Register r1, Register r2, branch_condition m3, address a4)              { emit_48( CLGRJ_ZOPC | reg(r1, 8, 48) | reg(r2, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   640
inline void Assembler::z_clib(Register r1,  int64_t i2, branch_condition m3, int64_t d4, Register b4)  { emit_48( CLIB_ZOPC  | reg(r1, 8, 48) | uimm4(m3, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | uimm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   641
inline void Assembler::z_clgib(Register r1, int64_t i2, branch_condition m3, int64_t d4, Register b4)  { emit_48( CLGIB_ZOPC | reg(r1, 8, 48) | uimm4(m3, 12, 48) | uimm12(d4, 20, 48) | reg(b4, 16, 48) | uimm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   642
inline void Assembler::z_clij(Register r1,  int64_t i2, branch_condition m3, address a4)               { emit_48( CLIJ_ZOPC  | reg(r1, 8, 48) | uimm4(m3, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | uimm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   643
inline void Assembler::z_clgij(Register r1, int64_t i2, branch_condition m3, address a4)               { emit_48( CLGIJ_ZOPC | reg(r1, 8, 48) | uimm4(m3, 12, 48) | simm16(RelAddr::pcrel_off16(a4, pc()), 16, 48) | uimm8(i2, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   644
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   645
// Compare and trap instructions (signed).
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   646
inline void Assembler::z_crt(Register  r1, Register r2, int64_t m3)  { emit_32( CRT_ZOPC   | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   647
inline void Assembler::z_cgrt(Register r1, Register r2, int64_t m3)  { emit_32( CGRT_ZOPC  | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   648
inline void Assembler::z_cit(Register  r1, int64_t i2, int64_t m3)   { emit_48( CIT_ZOPC   | reg(r1,  8, 48) | simm16(i2, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   649
inline void Assembler::z_cgit(Register r1, int64_t i2, int64_t m3)   { emit_48( CGIT_ZOPC  | reg(r1,  8, 48) | simm16(i2, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   650
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   651
// Compare and trap instructions (unsigned).
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   652
inline void Assembler::z_clrt(Register  r1, Register r2, int64_t m3) { emit_32( CLRT_ZOPC  | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   653
inline void Assembler::z_clgrt(Register r1, Register r2, int64_t m3) { emit_32( CLGRT_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   654
inline void Assembler::z_clfit(Register r1, int64_t i2, int64_t m3)  { emit_48( CLFIT_ZOPC | reg(r1,  8, 48) | uimm16(i2, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   655
inline void Assembler::z_clgit(Register r1, int64_t i2, int64_t m3)  { emit_48( CLGIT_ZOPC | reg(r1,  8, 48) | uimm16(i2, 16, 48) | uimm4(m3, 32, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   656
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   657
inline void Assembler::z_bc(  branch_condition m1, int64_t d2, Register x2, Register b2) { emit_32( BC_ZOPC | 0 << 16 | uimm4(m1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   658
inline void Assembler::z_bcr( branch_condition m1, Register r2) { emit_16( BCR_ZOPC | uimm4(m1,8,16) | reg(r2,12,16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   659
inline void Assembler::z_brc( branch_condition i1, int64_t i2)  { emit_32( BRC_ZOPC | uimm4(i1, 8, 32) | simm16(i2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   660
inline void Assembler::z_brc( branch_condition i1, address a)   { emit_32( BRC_ZOPC | uimm4(i1, 8, 32) | simm16(RelAddr::pcrel_off16(a, pc()), 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   661
inline void Assembler::z_brcl(branch_condition i1, address a)   { emit_48( BRCL_ZOPC | uimm4(i1, 8, 48)| simm32(RelAddr::pcrel_off32(a, pc()), 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   662
inline void Assembler::z_bctgr(Register r1, Register r2)        { emit_32( BCTGR_ZOPC | reg( r1, 24, 32) | reg( r2, 28, 32)); };
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   663
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   664
inline void Assembler::z_basr(Register r1, Register r2) { emit_16( BASR_ZOPC | regt(r1,8,16) | reg(r2,12,16)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   665
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   666
inline void Assembler::z_brasl(Register r1, address a) { emit_48( BRASL_ZOPC | regt(r1, 8, 48) | simm32(RelAddr::pcrel_off32(a, pc()), 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   667
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   668
inline void Assembler::z_brct(Register r1, address a) { emit_32( BRCT_ZOPC | regt(r1, 8, 32) | simm16(RelAddr::pcrel_off16(a, pc()), 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   669
inline void Assembler::z_brct(Register r1, Label& L) {z_brct(r1, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   670
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   671
inline void Assembler::z_brxh(Register r1, Register r3, address a) {emit_32( BRXH_ZOPC | reg(r1, 8, 32) | reg(r3, 12, 32)  | simm16(RelAddr::pcrel_off16(a, pc()), 16, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   672
inline void Assembler::z_brxh(Register r1, Register r3, Label& L) {z_brxh(r1, r3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   673
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   674
inline void Assembler::z_brxle(Register r1, Register r3, address a) {emit_32( BRXLE_ZOPC | reg(r1, 8, 32) | reg(r3, 12, 32) | simm16(RelAddr::pcrel_off16(a, pc()), 16, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   675
inline void Assembler::z_brxle(Register r1, Register r3, Label& L) {z_brxle(r1, r3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   676
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   677
inline void Assembler::z_brxhg(Register r1, Register r3, address a) {emit_48( BRXHG_ZOPC | reg(r1, 8, 48) | reg(r3, 12, 48) | simm16(RelAddr::pcrel_off16(a, pc()), 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   678
inline void Assembler::z_brxhg(Register r1, Register r3, Label& L) {z_brxhg(r1, r3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   679
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   680
inline void Assembler::z_brxlg(Register r1, Register r3, address a) {emit_48( BRXLG_ZOPC | reg(r1, 8, 48) | reg(r3, 12, 48) | simm16(RelAddr::pcrel_off16(a, pc()), 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   681
inline void Assembler::z_brxlg(Register r1, Register r3, Label& L) {z_brxlg(r1, r3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   682
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   683
inline void Assembler::z_flogr(Register r1, Register r2) { emit_32( FLOGR_ZOPC  | reg(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   684
inline void Assembler::z_popcnt(Register r1, Register r2) { emit_32( POPCNT_ZOPC  | reg(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   685
inline void Assembler::z_ahhhr(Register r1, Register r2, Register r3) { emit_32( AHHHR_ZOPC  | reg(r3, 16, 32) | reg(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   686
inline void Assembler::z_ahhlr(Register r1, Register r2, Register r3) { emit_32( AHHLR_ZOPC  | reg(r3, 16, 32) | reg(r1, 24, 32) | reg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   687
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   688
inline void Assembler::z_tam() { emit_16( TAM_ZOPC); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   689
inline void Assembler::z_stck(int64_t d2, Register b2)  { emit_32( STCK_ZOPC  | uimm12(d2, 20, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   690
inline void Assembler::z_stckf(int64_t d2, Register b2) { emit_32( STCKF_ZOPC | uimm12(d2, 20, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   691
inline void Assembler::z_stmg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( STMG_ZOPC | simm20(d2) | reg(r1, 8, 48) | reg(r3,12,48)| reg(b2,16,48) ); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   692
inline void Assembler::z_lmg(Register r1, Register r3, int64_t d2, Register b2)  { emit_48( LMG_ZOPC  | simm20(d2) | reg(r1, 8, 48) | reg(r3,12,48)| reg(b2,16,48) ); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   693
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   694
inline void Assembler::z_cs(Register r1, Register r3, int64_t d2, Register b2)  { emit_32( CS_ZOPC  | regt(r1, 8, 32) | reg(r3, 12, 32) | reg(b2, 16, 32) | uimm12(d2, 20, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   695
inline void Assembler::z_csy(Register r1, Register r3, int64_t d2, Register b2) { emit_48( CSY_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | reg(b2, 16, 48) | simm20(d2)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   696
inline void Assembler::z_csg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( CSG_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | reg(b2, 16, 48) | simm20(d2)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   697
inline void Assembler::z_cs( Register r1, Register r3, const Address& a) { assert(!a.has_index(), "Cannot encode index"); z_cs( r1, r3, a.disp(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   698
inline void Assembler::z_csy(Register r1, Register r3, const Address& a) { assert(!a.has_index(), "Cannot encode index"); z_csy(r1, r3, a.disp(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   699
inline void Assembler::z_csg(Register r1, Register r3, const Address& a) { assert(!a.has_index(), "Cannot encode index"); z_csg(r1, r3, a.disp(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   700
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   701
inline void Assembler::z_cvd(Register r1, int64_t d2, Register x2, Register b2)  { emit_32( CVD_ZOPC  | regt(r1, 8, 32) | reg(x2, 12, 32) | reg(b2, 16, 32) | uimm12(d2, 20, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   702
inline void Assembler::z_cvdg(Register r1, int64_t d2, Register x2, Register b2) { emit_48( CVDG_ZOPC | regt(r1, 8, 48) | reg(x2, 12, 48) | reg(b2, 16, 48) | simm20(d2)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   703
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
   704
47531
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   705
//---------------------------
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   706
//--  Vector Instructions  --
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   707
//---------------------------
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   708
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   709
//---<  Vector Support Instructions  >---
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   710
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   711
// Load (transfer from memory)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   712
inline void Assembler::z_vlm(    VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {emit_48(VLM_ZOPC   | vreg(v1,  8)     | vreg(v3, 12)     | rsmask_48(d2,     b2)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   713
inline void Assembler::z_vl(     VectorRegister v1, int64_t d2, Register x2, Register b2)             {emit_48(VL_ZOPC    | vreg(v1,  8)                        | rxmask_48(d2, x2, b2)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   714
inline void Assembler::z_vleb(   VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLEB_ZOPC  | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_BYTE, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   715
inline void Assembler::z_vleh(   VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLEH_ZOPC  | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_HW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   716
inline void Assembler::z_vlef(   VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLEF_ZOPC  | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_FW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   717
inline void Assembler::z_vleg(   VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLEG_ZOPC  | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_DW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   718
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   719
// Gather/Scatter
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   720
inline void Assembler::z_vgef(   VectorRegister v1, int64_t d2, VectorRegister vx2, Register b2, int64_t m3) {emit_48(VGEF_ZOPC  | vreg(v1,  8)                 | rvmask_48(d2, vx2, b2) | veix_mask(m3, VRET_FW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   721
inline void Assembler::z_vgeg(   VectorRegister v1, int64_t d2, VectorRegister vx2, Register b2, int64_t m3) {emit_48(VGEG_ZOPC  | vreg(v1,  8)                 | rvmask_48(d2, vx2, b2) | veix_mask(m3, VRET_DW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   722
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   723
inline void Assembler::z_vscef(  VectorRegister v1, int64_t d2, VectorRegister vx2, Register b2, int64_t m3) {emit_48(VSCEF_ZOPC | vreg(v1,  8)                 | rvmask_48(d2, vx2, b2) | veix_mask(m3, VRET_FW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   724
inline void Assembler::z_vsceg(  VectorRegister v1, int64_t d2, VectorRegister vx2, Register b2, int64_t m3) {emit_48(VSCEG_ZOPC | vreg(v1,  8)                 | rvmask_48(d2, vx2, b2) | veix_mask(m3, VRET_DW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   725
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   726
// load and replicate
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   727
inline void Assembler::z_vlrep(  VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLREP_ZOPC | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   728
inline void Assembler::z_vlrepb( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vlrep(v1, d2, x2, b2, VRET_BYTE); }// load byte and replicate to all vector elements of type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   729
inline void Assembler::z_vlreph( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vlrep(v1, d2, x2, b2, VRET_HW); }  // load HW   and replicate to all vector elements of type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   730
inline void Assembler::z_vlrepf( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vlrep(v1, d2, x2, b2, VRET_FW); }  // load FW   and replicate to all vector elements of type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   731
inline void Assembler::z_vlrepg( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vlrep(v1, d2, x2, b2, VRET_DW); }  // load DW   and replicate to all vector elements of type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   732
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   733
inline void Assembler::z_vllez(  VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLLEZ_ZOPC | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   734
inline void Assembler::z_vllezb( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vllez(v1, d2, x2, b2, VRET_BYTE); }// load logical byte into left DW of VR, zero all other bit positions.
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   735
inline void Assembler::z_vllezh( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vllez(v1, d2, x2, b2, VRET_HW); }  // load logical HW   into left DW of VR, zero all other bit positions.
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   736
inline void Assembler::z_vllezf( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vllez(v1, d2, x2, b2, VRET_FW); }  // load logical FW   into left DW of VR, zero all other bit positions.
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   737
inline void Assembler::z_vllezg( VectorRegister v1, int64_t d2, Register x2, Register b2)             {z_vllez(v1, d2, x2, b2, VRET_DW); }  // load logical DW   into left DW of VR, zero all other bit positions.
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   738
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   739
inline void Assembler::z_vlbb(   VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VLBB_ZOPC  | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | uimm4(m3, 32, 48)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   740
inline void Assembler::z_vll(    VectorRegister v1, Register r3, int64_t d2, Register b2)             {emit_48(VLL_ZOPC   | vreg(v1,  8)     |  reg(r3, 12, 48) | rsmask_48(d2,     b2)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   741
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   742
// Load (register to register)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   743
inline void Assembler::z_vlr (   VectorRegister v1, VectorRegister v2)                                {emit_48(VLR_ZOPC   | vreg(v1,  8)     | vreg(v2, 12)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   744
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   745
inline void Assembler::z_vlgv(   Register r1, VectorRegister v3, int64_t d2, Register b2, int64_t m4) {emit_48(VLGV_ZOPC  |  reg(r1,  8, 48) | vreg(v3, 12)     | rsmask_48(d2,     b2) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   746
inline void Assembler::z_vlgvb(  Register r1, VectorRegister v3, int64_t d2, Register b2)             {z_vlgv(r1, v3, d2, b2, VRET_BYTE); } // load byte from VR element (index d2(b2)) into GR (logical)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   747
inline void Assembler::z_vlgvh(  Register r1, VectorRegister v3, int64_t d2, Register b2)             {z_vlgv(r1, v3, d2, b2, VRET_HW); }   // load HW   from VR element (index d2(b2)) into GR (logical)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   748
inline void Assembler::z_vlgvf(  Register r1, VectorRegister v3, int64_t d2, Register b2)             {z_vlgv(r1, v3, d2, b2, VRET_FW); }   // load FW   from VR element (index d2(b2)) into GR (logical)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   749
inline void Assembler::z_vlgvg(  Register r1, VectorRegister v3, int64_t d2, Register b2)             {z_vlgv(r1, v3, d2, b2, VRET_DW); }   // load DW   from VR element (index d2(b2)) into GR.
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   750
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   751
inline void Assembler::z_vlvg(   VectorRegister v1, Register r3, int64_t d2, Register b2, int64_t m4) {emit_48(VLVG_ZOPC  | vreg(v1,  8)     |  reg(r3, 12, 48) | rsmask_48(d2,     b2) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   752
inline void Assembler::z_vlvgb(  VectorRegister v1, Register r3, int64_t d2, Register b2)             {z_vlvg(v1, r3, d2, b2, VRET_BYTE); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   753
inline void Assembler::z_vlvgh(  VectorRegister v1, Register r3, int64_t d2, Register b2)             {z_vlvg(v1, r3, d2, b2, VRET_HW); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   754
inline void Assembler::z_vlvgf(  VectorRegister v1, Register r3, int64_t d2, Register b2)             {z_vlvg(v1, r3, d2, b2, VRET_FW); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   755
inline void Assembler::z_vlvgg(  VectorRegister v1, Register r3, int64_t d2, Register b2)             {z_vlvg(v1, r3, d2, b2, VRET_DW); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   756
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   757
inline void Assembler::z_vlvgp(  VectorRegister v1, Register r2, Register r3)                         {emit_48(VLVGP_ZOPC | vreg(v1,  8)     |  reg(r2, 12, 48) |  reg(r3, 16, 48)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   758
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   759
// vector register pack
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   760
inline void Assembler::z_vpk(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VPK_ZOPC   | vreg(v1,  8)     | vreg(v2, 12)     | vreg(v3, 16)     | vesc_mask(m4, VRET_HW, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   761
inline void Assembler::z_vpkh(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpk(v1, v2, v3, VRET_HW); }       // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   762
inline void Assembler::z_vpkf(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpk(v1, v2, v3, VRET_FW); }       // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   763
inline void Assembler::z_vpkg(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpk(v1, v2, v3, VRET_DW); }       // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   764
47585
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   765
inline void Assembler::z_vpks(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4, int64_t cc5) {emit_48(VPKS_ZOPC  | vreg(v1,  8) |  vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_HW, VRET_DW, 32) | voprc_ccmask(cc5, 24)); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   766
inline void Assembler::z_vpksh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpks(v1, v2, v3, VRET_HW, VOPRC_CCIGN); }   // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   767
inline void Assembler::z_vpksf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpks(v1, v2, v3, VRET_FW, VOPRC_CCIGN); }   // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   768
inline void Assembler::z_vpksg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpks(v1, v2, v3, VRET_DW, VOPRC_CCIGN); }   // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   769
inline void Assembler::z_vpkshs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpks(v1, v2, v3, VRET_HW, VOPRC_CCSET); }   // vector element type 'H', set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   770
inline void Assembler::z_vpksfs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpks(v1, v2, v3, VRET_FW, VOPRC_CCSET); }   // vector element type 'F', set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   771
inline void Assembler::z_vpksgs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpks(v1, v2, v3, VRET_DW, VOPRC_CCSET); }   // vector element type 'G', set CC
47531
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   772
47585
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   773
inline void Assembler::z_vpkls(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4, int64_t cc5) {emit_48(VPKLS_ZOPC | vreg(v1,  8) |  vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_HW, VRET_DW, 32) | voprc_ccmask(cc5, 24)); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   774
inline void Assembler::z_vpklsh( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpkls(v1, v2, v3, VRET_HW, VOPRC_CCIGN); }  // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   775
inline void Assembler::z_vpklsf( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpkls(v1, v2, v3, VRET_FW, VOPRC_CCIGN); }  // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   776
inline void Assembler::z_vpklsg( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpkls(v1, v2, v3, VRET_DW, VOPRC_CCIGN); }  // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   777
inline void Assembler::z_vpklshs(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpkls(v1, v2, v3, VRET_HW, VOPRC_CCSET); }  // vector element type 'H', set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   778
inline void Assembler::z_vpklsfs(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpkls(v1, v2, v3, VRET_FW, VOPRC_CCSET); }  // vector element type 'F', set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   779
inline void Assembler::z_vpklsgs(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vpkls(v1, v2, v3, VRET_DW, VOPRC_CCSET); }  // vector element type 'G', set CC
47531
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   780
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   781
// vector register unpack (sign-extended)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   782
inline void Assembler::z_vuph(   VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VUPH_ZOPC  | vreg(v1,  8)     | vreg(v2, 12)     | vesc_mask(m3, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   783
inline void Assembler::z_vuphb(  VectorRegister v1, VectorRegister v2)                                {z_vuph(v1, v2, VRET_BYTE); }        // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   784
inline void Assembler::z_vuphh(  VectorRegister v1, VectorRegister v2)                                {z_vuph(v1, v2, VRET_HW); }          // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   785
inline void Assembler::z_vuphf(  VectorRegister v1, VectorRegister v2)                                {z_vuph(v1, v2, VRET_FW); }          // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   786
inline void Assembler::z_vupl(   VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VUPL_ZOPC  | vreg(v1,  8)     | vreg(v2, 12)     | vesc_mask(m3, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   787
inline void Assembler::z_vuplb(  VectorRegister v1, VectorRegister v2)                                {z_vupl(v1, v2, VRET_BYTE); }        // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   788
inline void Assembler::z_vuplh(  VectorRegister v1, VectorRegister v2)                                {z_vupl(v1, v2, VRET_HW); }          // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   789
inline void Assembler::z_vuplf(  VectorRegister v1, VectorRegister v2)                                {z_vupl(v1, v2, VRET_FW); }          // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   790
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   791
// vector register unpack (zero-extended)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   792
inline void Assembler::z_vuplh(  VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VUPLH_ZOPC | vreg(v1,  8)     | vreg(v2, 12)     | vesc_mask(m3, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   793
inline void Assembler::z_vuplhb( VectorRegister v1, VectorRegister v2)                                {z_vuplh(v1, v2, VRET_BYTE); }       // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   794
inline void Assembler::z_vuplhh( VectorRegister v1, VectorRegister v2)                                {z_vuplh(v1, v2, VRET_HW); }         // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   795
inline void Assembler::z_vuplhf( VectorRegister v1, VectorRegister v2)                                {z_vuplh(v1, v2, VRET_FW); }         // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   796
inline void Assembler::z_vupll(  VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VUPLL_ZOPC | vreg(v1,  8)     | vreg(v2, 12)     | vesc_mask(m3, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   797
inline void Assembler::z_vupllb( VectorRegister v1, VectorRegister v2)                                {z_vupll(v1, v2, VRET_BYTE); }       // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   798
inline void Assembler::z_vupllh( VectorRegister v1, VectorRegister v2)                                {z_vupll(v1, v2, VRET_HW); }         // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   799
inline void Assembler::z_vupllf( VectorRegister v1, VectorRegister v2)                                {z_vupll(v1, v2, VRET_FW); }         // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   800
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   801
// vector register merge high/low
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   802
inline void Assembler::z_vmrh(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMRH_ZOPC  | vreg(v1,  8)     | vreg(v2, 12)     | vreg(v3, 16)     | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   803
inline void Assembler::z_vmrhb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   804
inline void Assembler::z_vmrhh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   805
inline void Assembler::z_vmrhf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   806
inline void Assembler::z_vmrhg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   807
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   808
inline void Assembler::z_vmrl(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMRL_ZOPC  | vreg(v1,  8)     | vreg(v2, 12)     | vreg(v3, 16)     | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   809
inline void Assembler::z_vmrlb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   810
inline void Assembler::z_vmrlh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   811
inline void Assembler::z_vmrlf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   812
inline void Assembler::z_vmrlg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmrh(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   813
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   814
// vector register permute
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   815
inline void Assembler::z_vperm(  VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4) {emit_48(VPERM_ZOPC | vreg(v1,  8) |  vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   816
inline void Assembler::z_vpdi(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t        m4) {emit_48(VPDI_ZOPC  | vreg(v1,  8) |  vreg(v2, 12) | vreg(v3, 16) | uimm4(m4, 32, 48)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   817
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   818
// vector register replicate
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   819
inline void Assembler::z_vrep(   VectorRegister v1, VectorRegister v3, int64_t imm2, int64_t m4)      {emit_48(VREP_ZOPC  | vreg(v1,  8)     | vreg(v3, 12)     | simm16(imm2, 16, 48) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   820
inline void Assembler::z_vrepb(  VectorRegister v1, VectorRegister v3, int64_t imm2)                  {z_vrep(v1, v3, imm2, VRET_BYTE); }  // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   821
inline void Assembler::z_vreph(  VectorRegister v1, VectorRegister v3, int64_t imm2)                  {z_vrep(v1, v3, imm2, VRET_HW); }    // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   822
inline void Assembler::z_vrepf(  VectorRegister v1, VectorRegister v3, int64_t imm2)                  {z_vrep(v1, v3, imm2, VRET_FW); }    // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   823
inline void Assembler::z_vrepg(  VectorRegister v1, VectorRegister v3, int64_t imm2)                  {z_vrep(v1, v3, imm2, VRET_DW); }    // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   824
inline void Assembler::z_vrepi(  VectorRegister v1, int64_t imm2,      int64_t m3)                    {emit_48(VREPI_ZOPC | vreg(v1,  8)                        | simm16(imm2, 16, 48) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   825
inline void Assembler::z_vrepib( VectorRegister v1, int64_t imm2)                                     {z_vrepi(v1, imm2, VRET_BYTE); }     // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   826
inline void Assembler::z_vrepih( VectorRegister v1, int64_t imm2)                                     {z_vrepi(v1, imm2, VRET_HW); }       // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   827
inline void Assembler::z_vrepif( VectorRegister v1, int64_t imm2)                                     {z_vrepi(v1, imm2, VRET_FW); }       // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   828
inline void Assembler::z_vrepig( VectorRegister v1, int64_t imm2)                                     {z_vrepi(v1, imm2, VRET_DW); }       // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   829
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   830
inline void Assembler::z_vsel(   VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4) {emit_48(VSEL_ZOPC  | vreg(v1,  8) |  vreg(v2, 12) |  vreg(v3, 16) |  vreg(v4, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   831
inline void Assembler::z_vseg(   VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VSEG_ZOPC  | vreg(v1,  8)     | vreg(v2, 12)     | uimm4(m3, 32, 48)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   832
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   833
// Load (immediate)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   834
inline void Assembler::z_vleib(  VectorRegister v1, int64_t imm2, int64_t m3)                         {emit_48(VLEIB_ZOPC | vreg(v1,  8)                        | simm16(imm2, 32, 48)  | veix_mask(m3, VRET_BYTE, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   835
inline void Assembler::z_vleih(  VectorRegister v1, int64_t imm2, int64_t m3)                         {emit_48(VLEIH_ZOPC | vreg(v1,  8)                        | simm16(imm2, 32, 48)  | veix_mask(m3, VRET_HW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   836
inline void Assembler::z_vleif(  VectorRegister v1, int64_t imm2, int64_t m3)                         {emit_48(VLEIF_ZOPC | vreg(v1,  8)                        | simm16(imm2, 32, 48)  | veix_mask(m3, VRET_FW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   837
inline void Assembler::z_vleig(  VectorRegister v1, int64_t imm2, int64_t m3)                         {emit_48(VLEIG_ZOPC | vreg(v1,  8)                        | simm16(imm2, 32, 48)  | veix_mask(m3, VRET_DW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   838
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   839
// Store
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   840
inline void Assembler::z_vstm(   VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {emit_48(VSTM_ZOPC  | vreg(v1,  8)     | vreg(v3, 12)     | rsmask_48(d2,     b2)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   841
inline void Assembler::z_vst(    VectorRegister v1, int64_t d2, Register x2, Register b2)             {emit_48(VST_ZOPC   | vreg(v1,  8)                        | rxmask_48(d2, x2, b2)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   842
inline void Assembler::z_vsteb(  VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VSTEB_ZOPC | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_BYTE, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   843
inline void Assembler::z_vsteh(  VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VSTEH_ZOPC | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_HW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   844
inline void Assembler::z_vstef(  VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VSTEF_ZOPC | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_FW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   845
inline void Assembler::z_vsteg(  VectorRegister v1, int64_t d2, Register x2, Register b2, int64_t m3) {emit_48(VSTEG_ZOPC | vreg(v1,  8)                        | rxmask_48(d2, x2, b2) | veix_mask(m3, VRET_DW,   32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   846
inline void Assembler::z_vstl(   VectorRegister v1, Register r3, int64_t d2, Register b2)             {emit_48(VSTL_ZOPC  | vreg(v1,  8)     |  reg(r3, 12, 48) | rsmask_48(d2,     b2)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   847
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   848
// Misc
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   849
inline void Assembler::z_vgm(    VectorRegister v1, int64_t imm2, int64_t imm3, int64_t m4)           {emit_48(VGM_ZOPC   | vreg(v1,  8)     | uimm8( imm2, 16, 48) | uimm8(imm3, 24, 48) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   850
inline void Assembler::z_vgmb(   VectorRegister v1, int64_t imm2, int64_t imm3)                       {z_vgm(v1, imm2, imm3, VRET_BYTE); } // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   851
inline void Assembler::z_vgmh(   VectorRegister v1, int64_t imm2, int64_t imm3)                       {z_vgm(v1, imm2, imm3, VRET_HW); }   // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   852
inline void Assembler::z_vgmf(   VectorRegister v1, int64_t imm2, int64_t imm3)                       {z_vgm(v1, imm2, imm3, VRET_FW); }   // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   853
inline void Assembler::z_vgmg(   VectorRegister v1, int64_t imm2, int64_t imm3)                       {z_vgm(v1, imm2, imm3, VRET_DW); }   // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   854
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   855
inline void Assembler::z_vgbm(   VectorRegister v1, int64_t imm2)                                     {emit_48(VGBM_ZOPC  | vreg(v1,  8)     | uimm16(imm2, 16, 48)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   856
inline void Assembler::z_vzero(  VectorRegister v1)                                                   {z_vgbm(v1, 0); }      // preferred method to set vreg to all zeroes
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   857
inline void Assembler::z_vone(   VectorRegister v1)                                                   {z_vgbm(v1, 0xffff); } // preferred method to set vreg to all ones
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   858
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   859
//---<  Vector Arithmetic Instructions  >---
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   860
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   861
// Load
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   862
inline void Assembler::z_vlc(    VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VLC_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   863
inline void Assembler::z_vlcb(   VectorRegister v1, VectorRegister v2)                                {z_vlc(v1, v2, VRET_BYTE); }         // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   864
inline void Assembler::z_vlch(   VectorRegister v1, VectorRegister v2)                                {z_vlc(v1, v2, VRET_HW); }           // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   865
inline void Assembler::z_vlcf(   VectorRegister v1, VectorRegister v2)                                {z_vlc(v1, v2, VRET_FW); }           // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   866
inline void Assembler::z_vlcg(   VectorRegister v1, VectorRegister v2)                                {z_vlc(v1, v2, VRET_DW); }           // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   867
inline void Assembler::z_vlp(    VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VLP_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   868
inline void Assembler::z_vlpb(   VectorRegister v1, VectorRegister v2)                                {z_vlp(v1, v2, VRET_BYTE); }         // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   869
inline void Assembler::z_vlph(   VectorRegister v1, VectorRegister v2)                                {z_vlp(v1, v2, VRET_HW); }           // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   870
inline void Assembler::z_vlpf(   VectorRegister v1, VectorRegister v2)                                {z_vlp(v1, v2, VRET_FW); }           // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   871
inline void Assembler::z_vlpg(   VectorRegister v1, VectorRegister v2)                                {z_vlp(v1, v2, VRET_DW); }           // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   872
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   873
// ADD
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   874
inline void Assembler::z_va(     VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VA_ZOPC    | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_QW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   875
inline void Assembler::z_vab(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_va(v1, v2, v3, VRET_BYTE); }      // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   876
inline void Assembler::z_vah(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_va(v1, v2, v3, VRET_HW); }        // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   877
inline void Assembler::z_vaf(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_va(v1, v2, v3, VRET_FW); }        // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   878
inline void Assembler::z_vag(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_va(v1, v2, v3, VRET_DW); }        // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   879
inline void Assembler::z_vaq(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_va(v1, v2, v3, VRET_QW); }        // vector element type 'Q'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   880
inline void Assembler::z_vacc(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VACC_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_QW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   881
inline void Assembler::z_vaccb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vacc(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   882
inline void Assembler::z_vacch(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vacc(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   883
inline void Assembler::z_vaccf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vacc(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   884
inline void Assembler::z_vaccg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vacc(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   885
inline void Assembler::z_vaccq(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vacc(v1, v2, v3, VRET_QW); }      // vector element type 'Q'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   886
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   887
// SUB
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   888
inline void Assembler::z_vs(     VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VS_ZOPC    | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_QW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   889
inline void Assembler::z_vsb(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vs(v1, v2, v3, VRET_BYTE); }      // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   890
inline void Assembler::z_vsh(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vs(v1, v2, v3, VRET_HW); }        // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   891
inline void Assembler::z_vsf(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vs(v1, v2, v3, VRET_FW); }        // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   892
inline void Assembler::z_vsg(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vs(v1, v2, v3, VRET_DW); }        // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   893
inline void Assembler::z_vsq(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vs(v1, v2, v3, VRET_QW); }        // vector element type 'Q'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   894
inline void Assembler::z_vscbi(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VSCBI_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_QW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   895
inline void Assembler::z_vscbib( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vscbi(v1, v2, v3, VRET_BYTE); }   // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   896
inline void Assembler::z_vscbih( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vscbi(v1, v2, v3, VRET_HW); }     // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   897
inline void Assembler::z_vscbif( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vscbi(v1, v2, v3, VRET_FW); }     // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   898
inline void Assembler::z_vscbig( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vscbi(v1, v2, v3, VRET_DW); }     // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   899
inline void Assembler::z_vscbiq( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vscbi(v1, v2, v3, VRET_QW); }     // vector element type 'Q'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   900
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   901
// MULTIPLY
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   902
inline void Assembler::z_vml(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VML_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   903
inline void Assembler::z_vmh(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMH_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   904
inline void Assembler::z_vmlh(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMLH_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   905
inline void Assembler::z_vme(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VME_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   906
inline void Assembler::z_vmle(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMLE_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   907
inline void Assembler::z_vmo(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMO_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   908
inline void Assembler::z_vmlo(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMLO_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   909
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   910
// MULTIPLY & ADD
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   911
inline void Assembler::z_vmal(   VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMAL_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   912
inline void Assembler::z_vmah(   VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMAH_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   913
inline void Assembler::z_vmalh(  VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMALH_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   914
inline void Assembler::z_vmae(   VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMAE_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   915
inline void Assembler::z_vmale(  VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMALE_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   916
inline void Assembler::z_vmao(   VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMAO_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   917
inline void Assembler::z_vmalo(  VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VMALO_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32) | vesc_mask(m5, VRET_BYTE, VRET_FW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   918
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   919
// VECTOR SUM
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   920
inline void Assembler::z_vsum(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VSUM_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_HW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   921
inline void Assembler::z_vsumb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vsum(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   922
inline void Assembler::z_vsumh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vsum(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   923
inline void Assembler::z_vsumg(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VSUMG_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_HW,   VRET_FW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   924
inline void Assembler::z_vsumgh( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vsumg(v1, v2, v3, VRET_HW); }     // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   925
inline void Assembler::z_vsumgf( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vsumg(v1, v2, v3, VRET_FW); }     // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   926
inline void Assembler::z_vsumq(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VSUMQ_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_FW,   VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   927
inline void Assembler::z_vsumqf( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vsumq(v1, v2, v3, VRET_FW); }     // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   928
inline void Assembler::z_vsumqg( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vsumq(v1, v2, v3, VRET_DW); }     // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   929
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   930
// Average
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   931
inline void Assembler::z_vavg(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VAVG_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   932
inline void Assembler::z_vavgb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavg(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   933
inline void Assembler::z_vavgh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavg(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   934
inline void Assembler::z_vavgf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavg(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   935
inline void Assembler::z_vavgg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavg(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   936
inline void Assembler::z_vavgl(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VAVGL_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   937
inline void Assembler::z_vavglb( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavgl(v1, v2, v3, VRET_BYTE); }   // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   938
inline void Assembler::z_vavglh( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavgl(v1, v2, v3, VRET_HW); }     // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   939
inline void Assembler::z_vavglf( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavgl(v1, v2, v3, VRET_FW); }     // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   940
inline void Assembler::z_vavglg( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vavgl(v1, v2, v3, VRET_DW); }     // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   941
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   942
// VECTOR Galois Field Multiply Sum
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   943
inline void Assembler::z_vgfm(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VGFM_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   944
inline void Assembler::z_vgfmb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vgfm(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   945
inline void Assembler::z_vgfmh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vgfm(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   946
inline void Assembler::z_vgfmf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vgfm(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   947
inline void Assembler::z_vgfmg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vgfm(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   948
inline void Assembler::z_vgfma(  VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t m5) {emit_48(VGFMA_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v3, 16) | vesc_mask(m5, VRET_BYTE, VRET_DW, 20)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   949
inline void Assembler::z_vgfmab( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4) {z_vgfma(v1, v2, v3, v4, VRET_BYTE); } // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   950
inline void Assembler::z_vgfmah( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4) {z_vgfma(v1, v2, v3, v4, VRET_HW); }   // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   951
inline void Assembler::z_vgfmaf( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4) {z_vgfma(v1, v2, v3, v4, VRET_FW); }   // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   952
inline void Assembler::z_vgfmag( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4) {z_vgfma(v1, v2, v3, v4, VRET_DW); }   // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   953
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   954
//---<  Vector Logical Instructions  >---
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   955
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   956
// AND
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   957
inline void Assembler::z_vn(     VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VN_ZOPC    | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   958
inline void Assembler::z_vnc(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VNC_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   959
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   960
// XOR
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   961
inline void Assembler::z_vx(     VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VX_ZOPC    | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   962
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   963
// NOR
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   964
inline void Assembler::z_vno(    VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VNO_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   965
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   966
// OR
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   967
inline void Assembler::z_vo(     VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VO_ZOPC    | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   968
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   969
// Comparison (element-wise)
47585
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   970
inline void Assembler::z_vceq(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4, int64_t cc5) {emit_48(VCEQ_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32) | voprc_ccmask(cc5, 24)); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   971
inline void Assembler::z_vceqb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_BYTE, VOPRC_CCIGN); } // vector element type 'B', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   972
inline void Assembler::z_vceqh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_HW,   VOPRC_CCIGN); } // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   973
inline void Assembler::z_vceqf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_FW,   VOPRC_CCIGN); } // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   974
inline void Assembler::z_vceqg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_DW,   VOPRC_CCIGN); } // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   975
inline void Assembler::z_vceqbs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_BYTE, VOPRC_CCSET); } // vector element type 'B', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   976
inline void Assembler::z_vceqhs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_HW,   VOPRC_CCSET); } // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   977
inline void Assembler::z_vceqfs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_FW,   VOPRC_CCSET); } // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   978
inline void Assembler::z_vceqgs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vceq(v1, v2, v3, VRET_DW,   VOPRC_CCSET); } // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   979
inline void Assembler::z_vch(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4, int64_t cc5) {emit_48(VCH_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32) | voprc_ccmask(cc5, 24)); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   980
inline void Assembler::z_vchb(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_BYTE,  VOPRC_CCIGN); }  // vector element type 'B', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   981
inline void Assembler::z_vchh(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_HW,    VOPRC_CCIGN); }  // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   982
inline void Assembler::z_vchf(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_FW,    VOPRC_CCIGN); }  // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   983
inline void Assembler::z_vchg(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_DW,    VOPRC_CCIGN); }  // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   984
inline void Assembler::z_vchbs(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_BYTE,  VOPRC_CCSET); }  // vector element type 'B', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   985
inline void Assembler::z_vchhs(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_HW,    VOPRC_CCSET); }  // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   986
inline void Assembler::z_vchfs(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_FW,    VOPRC_CCSET); }  // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   987
inline void Assembler::z_vchgs(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vch(v1, v2, v3, VRET_DW,    VOPRC_CCSET); }  // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   988
inline void Assembler::z_vchl(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4, int64_t cc5) {emit_48(VCHL_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32) | voprc_ccmask(cc5, 24)); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   989
inline void Assembler::z_vchlb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_BYTE, VOPRC_CCIGN); }  // vector element type 'B', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   990
inline void Assembler::z_vchlh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_HW,   VOPRC_CCIGN); }  // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   991
inline void Assembler::z_vchlf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_FW,   VOPRC_CCIGN); }  // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   992
inline void Assembler::z_vchlg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_DW,   VOPRC_CCIGN); }  // vector element type 'G', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   993
inline void Assembler::z_vchlbs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_BYTE, VOPRC_CCSET); }  // vector element type 'B', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   994
inline void Assembler::z_vchlhs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_HW,   VOPRC_CCSET); }  // vector element type 'H', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   995
inline void Assembler::z_vchlfs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_FW,   VOPRC_CCSET); }  // vector element type 'F', don't set CC
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
   996
inline void Assembler::z_vchlgs( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vchl(v1, v2, v3, VRET_DW,   VOPRC_CCSET); }  // vector element type 'G', don't set CC
47531
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   997
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   998
// Max/Min (element-wise)
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
   999
inline void Assembler::z_vmx(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMX_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1000
inline void Assembler::z_vmxb(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmx(v1, v2, v3, VRET_BYTE); }     // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1001
inline void Assembler::z_vmxh(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmx(v1, v2, v3, VRET_HW); }       // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1002
inline void Assembler::z_vmxf(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmx(v1, v2, v3, VRET_FW); }       // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1003
inline void Assembler::z_vmxg(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmx(v1, v2, v3, VRET_DW); }       // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1004
inline void Assembler::z_vmxl(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMXL_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1005
inline void Assembler::z_vmxlb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmxl(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1006
inline void Assembler::z_vmxlh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmxl(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1007
inline void Assembler::z_vmxlf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmxl(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1008
inline void Assembler::z_vmxlg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmxl(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1009
inline void Assembler::z_vmn(    VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMN_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1010
inline void Assembler::z_vmnb(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmn(v1, v2, v3, VRET_BYTE); }     // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1011
inline void Assembler::z_vmnh(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmn(v1, v2, v3, VRET_HW); }       // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1012
inline void Assembler::z_vmnf(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmn(v1, v2, v3, VRET_FW); }       // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1013
inline void Assembler::z_vmng(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmn(v1, v2, v3, VRET_DW); }       // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1014
inline void Assembler::z_vmnl(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t m4) {emit_48(VMNL_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1015
inline void Assembler::z_vmnlb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmnl(v1, v2, v3, VRET_BYTE); }    // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1016
inline void Assembler::z_vmnlh(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmnl(v1, v2, v3, VRET_HW); }      // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1017
inline void Assembler::z_vmnlf(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmnl(v1, v2, v3, VRET_FW); }      // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1018
inline void Assembler::z_vmnlg(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vmnl(v1, v2, v3, VRET_DW); }      // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1019
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1020
// Leading/Trailing Zeros, population count
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1021
inline void Assembler::z_vclz(   VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VCLZ_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1022
inline void Assembler::z_vclzb(  VectorRegister v1, VectorRegister v2)                                {z_vclz(v1, v2, VRET_BYTE); }        // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1023
inline void Assembler::z_vclzh(  VectorRegister v1, VectorRegister v2)                                {z_vclz(v1, v2, VRET_HW); }          // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1024
inline void Assembler::z_vclzf(  VectorRegister v1, VectorRegister v2)                                {z_vclz(v1, v2, VRET_FW); }          // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1025
inline void Assembler::z_vclzg(  VectorRegister v1, VectorRegister v2)                                {z_vclz(v1, v2, VRET_DW); }          // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1026
inline void Assembler::z_vctz(   VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VCTZ_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1027
inline void Assembler::z_vctzb(  VectorRegister v1, VectorRegister v2)                                {z_vctz(v1, v2, VRET_BYTE); }        // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1028
inline void Assembler::z_vctzh(  VectorRegister v1, VectorRegister v2)                                {z_vctz(v1, v2, VRET_HW); }          // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1029
inline void Assembler::z_vctzf(  VectorRegister v1, VectorRegister v2)                                {z_vctz(v1, v2, VRET_FW); }          // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1030
inline void Assembler::z_vctzg(  VectorRegister v1, VectorRegister v2)                                {z_vctz(v1, v2, VRET_DW); }          // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1031
inline void Assembler::z_vpopct( VectorRegister v1, VectorRegister v2, int64_t m3)                    {emit_48(VPOPCT_ZOPC| vreg(v1,  8) | vreg(v2, 12) | vesc_mask(m3, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1032
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1033
// Rotate/Shift
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1034
inline void Assembler::z_verllv( VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t m4) {emit_48(VERLLV_ZOPC| vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1035
inline void Assembler::z_verllvb(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_verllv(v1, v2, v3, VRET_BYTE); }  // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1036
inline void Assembler::z_verllvh(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_verllv(v1, v2, v3, VRET_HW); }    // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1037
inline void Assembler::z_verllvf(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_verllv(v1, v2, v3, VRET_FW); }    // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1038
inline void Assembler::z_verllvg(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_verllv(v1, v2, v3, VRET_DW); }    // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1039
inline void Assembler::z_verll(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2,         int64_t m4) {emit_48(VERLL_ZOPC | vreg(v1,  8) | vreg(v3, 12) | rsmask_48(d2, b2) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1040
inline void Assembler::z_verllb( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_verll(v1, v3, d2, b2, VRET_BYTE);}// vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1041
inline void Assembler::z_verllh( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_verll(v1, v3, d2, b2, VRET_HW);}  // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1042
inline void Assembler::z_verllf( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_verll(v1, v3, d2, b2, VRET_FW);}  // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1043
inline void Assembler::z_verllg( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_verll(v1, v3, d2, b2, VRET_DW);}  // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1044
inline void Assembler::z_verim(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4, int64_t m5) {emit_48(VERLL_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | uimm8(imm4, 24, 48) | vesc_mask(m5, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1045
inline void Assembler::z_verimb( VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4) {z_verim(v1, v2, v3, imm4, VRET_BYTE); }   // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1046
inline void Assembler::z_verimh( VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4) {z_verim(v1, v2, v3, imm4, VRET_HW); }     // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1047
inline void Assembler::z_verimf( VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4) {z_verim(v1, v2, v3, imm4, VRET_FW); }     // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1048
inline void Assembler::z_verimg( VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4) {z_verim(v1, v2, v3, imm4, VRET_DW); }     // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1049
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1050
inline void Assembler::z_veslv(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t m4) {emit_48(VESLV_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1051
inline void Assembler::z_veslvb( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_veslv(v1, v2, v3, VRET_BYTE); }   // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1052
inline void Assembler::z_veslvh( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_veslv(v1, v2, v3, VRET_HW); }     // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1053
inline void Assembler::z_veslvf( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_veslv(v1, v2, v3, VRET_FW); }     // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1054
inline void Assembler::z_veslvg( VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_veslv(v1, v2, v3, VRET_DW); }     // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1055
inline void Assembler::z_vesl(   VectorRegister v1, VectorRegister v3, int64_t d2, Register b2,         int64_t m4) {emit_48(VESL_ZOPC  | vreg(v1,  8) | vreg(v3, 12) | rsmask_48(d2, b2) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1056
inline void Assembler::z_veslb(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesl(v1, v3, d2, b2, VRET_BYTE);} // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1057
inline void Assembler::z_veslh(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesl(v1, v3, d2, b2, VRET_HW);}   // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1058
inline void Assembler::z_veslf(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesl(v1, v3, d2, b2, VRET_FW);}   // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1059
inline void Assembler::z_veslg(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesl(v1, v3, d2, b2, VRET_DW);}   // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1060
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1061
inline void Assembler::z_vesrav( VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t m4) {emit_48(VESRAV_ZOPC| vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1062
inline void Assembler::z_vesravb(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrav(v1, v2, v3, VRET_BYTE); }  // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1063
inline void Assembler::z_vesravh(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrav(v1, v2, v3, VRET_HW); }    // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1064
inline void Assembler::z_vesravf(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrav(v1, v2, v3, VRET_FW); }    // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1065
inline void Assembler::z_vesravg(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrav(v1, v2, v3, VRET_DW); }    // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1066
inline void Assembler::z_vesra(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2,         int64_t m4) {emit_48(VESRA_ZOPC | vreg(v1,  8) | vreg(v3, 12) | rsmask_48(d2, b2) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1067
inline void Assembler::z_vesrab( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesra(v1, v3, d2, b2, VRET_BYTE);}// vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1068
inline void Assembler::z_vesrah( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesra(v1, v3, d2, b2, VRET_HW);}  // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1069
inline void Assembler::z_vesraf( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesra(v1, v3, d2, b2, VRET_FW);}  // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1070
inline void Assembler::z_vesrag( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesra(v1, v3, d2, b2, VRET_DW);}  // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1071
inline void Assembler::z_vesrlv( VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t m4) {emit_48(VESRLV_ZOPC| vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1072
inline void Assembler::z_vesrlvb(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrlv(v1, v2, v3, VRET_BYTE); }  // vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1073
inline void Assembler::z_vesrlvh(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrlv(v1, v2, v3, VRET_HW); }    // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1074
inline void Assembler::z_vesrlvf(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrlv(v1, v2, v3, VRET_FW); }    // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1075
inline void Assembler::z_vesrlvg(VectorRegister v1, VectorRegister v2, VectorRegister v3)             {z_vesrlv(v1, v2, v3, VRET_DW); }    // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1076
inline void Assembler::z_vesrl(  VectorRegister v1, VectorRegister v3, int64_t d2, Register b2,         int64_t m4) {emit_48(VESRL_ZOPC | vreg(v1,  8) | vreg(v3, 12) | rsmask_48(d2, b2) | vesc_mask(m4, VRET_BYTE, VRET_DW, 32)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1077
inline void Assembler::z_vesrlb( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesrl(v1, v3, d2, b2, VRET_BYTE);}// vector element type 'B'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1078
inline void Assembler::z_vesrlh( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesrl(v1, v3, d2, b2, VRET_HW);}  // vector element type 'H'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1079
inline void Assembler::z_vesrlf( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesrl(v1, v3, d2, b2, VRET_FW);}  // vector element type 'F'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1080
inline void Assembler::z_vesrlg( VectorRegister v1, VectorRegister v3, int64_t d2, Register b2)       {z_vesrl(v1, v3, d2, b2, VRET_DW);}  // vector element type 'G'
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1081
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1082
inline void Assembler::z_vsl(    VectorRegister v1, VectorRegister v2, VectorRegister v3)               {emit_48(VSL_ZOPC   | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1083
inline void Assembler::z_vslb(   VectorRegister v1, VectorRegister v2, VectorRegister v3)               {emit_48(VSLB_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1084
inline void Assembler::z_vsldb(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4) {emit_48(VSLDB_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | uimm8(imm4, 24, 48)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1085
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1086
inline void Assembler::z_vsra(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VSRA_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1087
inline void Assembler::z_vsrab(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VSRAB_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1088
inline void Assembler::z_vsrl(   VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VSRL_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1089
inline void Assembler::z_vsrlb(  VectorRegister v1, VectorRegister v2, VectorRegister v3)             {emit_48(VSRLB_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1090
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1091
// Test under Mask
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1092
inline void Assembler::z_vtm(    VectorRegister v1, VectorRegister v2)                                {emit_48(VTM_ZOPC   | vreg(v1,  8) | vreg(v2, 12)); }
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1093
47585
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1094
//---<  Vector String Instructions  >---
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1095
inline void Assembler::z_vfae(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4, int64_t cc5) {emit_48(VFAE_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(imm4, VRET_BYTE, VRET_FW, 32) | voprc_any(cc5, 24) ); }  // Find any element
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1096
inline void Assembler::z_vfaeb(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfae(v1, v2, v3, VRET_BYTE, cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1097
inline void Assembler::z_vfaeh(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfae(v1, v2, v3, VRET_HW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1098
inline void Assembler::z_vfaef(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfae(v1, v2, v3, VRET_FW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1099
inline void Assembler::z_vfee(   VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4, int64_t cc5) {emit_48(VFEE_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(imm4, VRET_BYTE, VRET_FW, 32) | voprc_any(cc5, 24) ); }  // Find element equal
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1100
inline void Assembler::z_vfeeb(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfee(v1, v2, v3, VRET_BYTE, cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1101
inline void Assembler::z_vfeeh(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfee(v1, v2, v3, VRET_HW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1102
inline void Assembler::z_vfeef(  VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfee(v1, v2, v3, VRET_FW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1103
inline void Assembler::z_vfene(  VectorRegister v1, VectorRegister v2, VectorRegister v3, int64_t imm4, int64_t cc5) {emit_48(VFENE_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16)      | vesc_mask(imm4, VRET_BYTE, VRET_FW, 32) | voprc_any(cc5, 24) ); }  // Find element not equal
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1104
inline void Assembler::z_vfeneb( VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfene(v1, v2, v3, VRET_BYTE, cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1105
inline void Assembler::z_vfeneh( VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfene(v1, v2, v3, VRET_HW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1106
inline void Assembler::z_vfenef( VectorRegister v1, VectorRegister v2, VectorRegister v3,               int64_t cc5) {z_vfene(v1, v2, v3, VRET_FW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1107
inline void Assembler::z_vstrc(  VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4, int64_t imm5, int64_t cc6) {emit_48(VSTRC_ZOPC | vreg(v1,  8) | vreg(v2, 12) | vreg(v3, 16) | vreg(v4, 32)     | vesc_mask(imm5, VRET_BYTE, VRET_FW, 20) | voprc_any(cc6, 24) ); }  // String range compare
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1108
inline void Assembler::z_vstrcb( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4,               int64_t cc6) {z_vstrc(v1, v2, v3, v4, VRET_BYTE, cc6); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1109
inline void Assembler::z_vstrch( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4,               int64_t cc6) {z_vstrc(v1, v2, v3, v4, VRET_HW,   cc6); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1110
inline void Assembler::z_vstrcf( VectorRegister v1, VectorRegister v2, VectorRegister v3, VectorRegister v4,               int64_t cc6) {z_vstrc(v1, v2, v3, v4, VRET_FW,   cc6); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1111
inline void Assembler::z_vistr(  VectorRegister v1, VectorRegister v2, int64_t imm3, int64_t cc5) {emit_48(VISTR_ZOPC  | vreg(v1,  8) | vreg(v2, 12) | vesc_mask(imm3, VRET_BYTE, VRET_FW, 32) | voprc_any(cc5, 24) ); }  // isolate string
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1112
inline void Assembler::z_vistrb( VectorRegister v1, VectorRegister v2,               int64_t cc5) {z_vistr(v1, v2, VRET_BYTE, cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1113
inline void Assembler::z_vistrh( VectorRegister v1, VectorRegister v2,               int64_t cc5) {z_vistr(v1, v2, VRET_HW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1114
inline void Assembler::z_vistrf( VectorRegister v1, VectorRegister v2,               int64_t cc5) {z_vistr(v1, v2, VRET_FW,   cc5); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1115
inline void Assembler::z_vistrbs(VectorRegister v1, VectorRegister v2)                            {z_vistr(v1, v2, VRET_BYTE, VOPRC_CCSET); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1116
inline void Assembler::z_vistrhs(VectorRegister v1, VectorRegister v2)                            {z_vistr(v1, v2, VRET_HW,   VOPRC_CCSET); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1117
inline void Assembler::z_vistrfs(VectorRegister v1, VectorRegister v2)                            {z_vistr(v1, v2, VRET_FW,   VOPRC_CCSET); }
c264868bff5b 8187969: [s390] z/Architecture Vector Facility Support. Part II
lucy
parents: 47531
diff changeset
  1118
47531
6481d7b6c31e 8187573: [s390] z/Architecture Vector Facility Support
lucy
parents: 47216
diff changeset
  1119
42065
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1120
//-------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1121
// FLOAT INSTRUCTIONS
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1122
//-------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1123
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1124
//----------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1125
// LOAD
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1126
//----------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1127
inline void Assembler::z_ler(  FloatRegister r1, FloatRegister r2) { emit_16( LER_ZOPC   | fregt(r1,8,16)    | freg(r2,12,16));   }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1128
inline void Assembler::z_ldr(  FloatRegister r1, FloatRegister r2) { emit_16( LDR_ZOPC   | fregt(r1,8,16)    | freg(r2,12,16));   }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1129
inline void Assembler::z_ldebr(FloatRegister r1, FloatRegister r2) { emit_32( LDEBR_ZOPC | fregt(r1, 24, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1130
inline void Assembler::z_ledbr(FloatRegister r1, FloatRegister r2) { emit_32( LEDBR_ZOPC | fregt(r1, 24, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1131
inline void Assembler::z_le( FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_32( LE_ZOPC  | fregt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1132
inline void Assembler::z_ley(FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_48( LEY_ZOPC | fregt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1133
inline void Assembler::z_ld( FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_32( LD_ZOPC  | fregt(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1134
inline void Assembler::z_ldy(FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_48( LDY_ZOPC | fregt(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1135
inline void Assembler::z_le( FloatRegister r1, const Address &a) { z_le( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1136
inline void Assembler::z_ley(FloatRegister r1, const Address &a) { z_ley(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1137
inline void Assembler::z_ld( FloatRegister r1, const Address &a) { z_ld( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1138
inline void Assembler::z_ldy(FloatRegister r1, const Address &a) { z_ldy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1139
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1140
inline void Assembler::z_lzdr(FloatRegister r1) { emit_32( LZDR_ZOPC | fregt(r1, 24, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1141
inline void Assembler::z_lzer(FloatRegister f1) { emit_32( LZER_ZOPC | fregt(f1, 24, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1142
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1143
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1144
//-----------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1145
// STORE
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1146
//-----------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1147
inline void Assembler::z_ste( FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_32( STE_ZOPC  | freg(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1148
inline void Assembler::z_stey(FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_48( STEY_ZOPC | freg(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1149
inline void Assembler::z_std( FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_32( STD_ZOPC  | freg(r1, 8, 32) | uimm12(d2, 20, 32) | reg(x2, 12, 32) | regz(b2, 16, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1150
inline void Assembler::z_stdy(FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_48( STDY_ZOPC | freg(r1, 8, 48) | simm20(d2)         | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1151
inline void Assembler::z_ste( FloatRegister r1, const Address &a) { z_ste( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1152
inline void Assembler::z_stey(FloatRegister r1, const Address &a) { z_stey(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1153
inline void Assembler::z_std( FloatRegister r1, const Address &a) { z_std( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1154
inline void Assembler::z_stdy(FloatRegister r1, const Address &a) { z_stdy(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1155
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1156
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1157
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1158
// ADD
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1159
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1160
inline void Assembler::z_aebr( FloatRegister f1, FloatRegister f2)                  { emit_32( AEBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1161
inline void Assembler::z_adbr( FloatRegister f1, FloatRegister f2)                  { emit_32( ADBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1162
inline void Assembler::z_aeb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( AEB_ZOPC | fregt( f1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1163
inline void Assembler::z_adb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( ADB_ZOPC | fregt( f1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1164
inline void Assembler::z_aeb(  FloatRegister r1, const Address& a)                   { z_aeb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1165
inline void Assembler::z_adb(  FloatRegister r1, const Address& a)                   { z_adb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1166
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1167
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1168
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1169
// SUB
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1170
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1171
inline void Assembler::z_sebr( FloatRegister f1, FloatRegister f2)                  { emit_32( SEBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1172
inline void Assembler::z_sdbr( FloatRegister f1, FloatRegister f2)                  { emit_32( SDBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1173
inline void Assembler::z_seb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( SEB_ZOPC | fregt( f1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1174
inline void Assembler::z_sdb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( SDB_ZOPC | fregt( f1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1175
inline void Assembler::z_seb(  FloatRegister r1, const Address& a)                   { z_seb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1176
inline void Assembler::z_sdb(  FloatRegister r1, const Address& a)                   { z_sdb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1177
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1178
inline void Assembler::z_lcebr(FloatRegister r1, FloatRegister r2)                   { emit_32( LCEBR_ZOPC | fregt(r1, 24, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1179
inline void Assembler::z_lcdbr(FloatRegister r1, FloatRegister r2)                   { emit_32( LCDBR_ZOPC | fregt(r1, 24, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1180
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1181
inline void Assembler::z_lpdbr( FloatRegister fr1, FloatRegister fr2) { emit_32( LPDBR_ZOPC | fregt( fr1, 24,32) | freg((fr2 == fnoreg) ? fr1:fr2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1182
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1183
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1184
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1185
// MUL
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1186
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1187
inline void Assembler::z_meebr(FloatRegister f1, FloatRegister f2)                  { emit_32( MEEBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1188
inline void Assembler::z_mdbr( FloatRegister f1, FloatRegister f2)                  { emit_32( MDBR_ZOPC  | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1189
inline void Assembler::z_meeb( FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( MEEB_ZOPC | fregt( f1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1190
inline void Assembler::z_mdb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( MDB_ZOPC  | fregt( f1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1191
inline void Assembler::z_meeb( FloatRegister r1, const Address& a)                   { z_meeb( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1192
inline void Assembler::z_mdb(  FloatRegister r1, const Address& a)                   { z_mdb(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1193
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1194
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1195
//---------------
42897
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1196
// MUL-ADD
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1197
//---------------
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1198
inline void Assembler::z_maebr(FloatRegister f1, FloatRegister f3, FloatRegister f2) { emit_32( MAEBR_ZOPC | fregt(f1, 16, 32) | freg(f3, 24, 32) | freg(f2, 28, 32) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1199
inline void Assembler::z_madbr(FloatRegister f1, FloatRegister f3, FloatRegister f2) { emit_32( MADBR_ZOPC | fregt(f1, 16, 32) | freg(f3, 24, 32) | freg(f2, 28, 32) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1200
inline void Assembler::z_msebr(FloatRegister f1, FloatRegister f3, FloatRegister f2) { emit_32( MSEBR_ZOPC | fregt(f1, 16, 32) | freg(f3, 24, 32) | freg(f2, 28, 32) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1201
inline void Assembler::z_msdbr(FloatRegister f1, FloatRegister f3, FloatRegister f2) { emit_32( MSDBR_ZOPC | fregt(f1, 16, 32) | freg(f3, 24, 32) | freg(f2, 28, 32) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1202
inline void Assembler::z_maeb(FloatRegister f1, FloatRegister f3, int64_t d2, Register x2, Register b2) { emit_48( MAEB_ZOPC | fregt(f1, 32, 48) | freg(f3, 8, 48) | uimm12(d2, 20, 48) | reg(x2, 12, 48) | regz(b2, 16, 48) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1203
inline void Assembler::z_madb(FloatRegister f1, FloatRegister f3, int64_t d2, Register x2, Register b2) { emit_48( MADB_ZOPC | fregt(f1, 32, 48) | freg(f3, 8, 48) | uimm12(d2, 20, 48) | reg(x2, 12, 48) | regz(b2, 16, 48) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1204
inline void Assembler::z_mseb(FloatRegister f1, FloatRegister f3, int64_t d2, Register x2, Register b2) { emit_48( MSEB_ZOPC | fregt(f1, 32, 48) | freg(f3, 8, 48) | uimm12(d2, 20, 48) | reg(x2, 12, 48) | regz(b2, 16, 48) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1205
inline void Assembler::z_msdb(FloatRegister f1, FloatRegister f3, int64_t d2, Register x2, Register b2) { emit_48( MSDB_ZOPC | fregt(f1, 32, 48) | freg(f3, 8, 48) | uimm12(d2, 20, 48) | reg(x2, 12, 48) | regz(b2, 16, 48) );}
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1206
inline void Assembler::z_maeb(FloatRegister f1, FloatRegister f3, const Address& a) { z_maeb(f1, f3, a.disp(), a.indexOrR0(), a.baseOrR0()); }
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1207
inline void Assembler::z_madb(FloatRegister f1, FloatRegister f3, const Address& a) { z_madb(f1, f3, a.disp(), a.indexOrR0(), a.baseOrR0()); }
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1208
inline void Assembler::z_mseb(FloatRegister f1, FloatRegister f3, const Address& a) { z_mseb(f1, f3, a.disp(), a.indexOrR0(), a.baseOrR0()); }
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1209
inline void Assembler::z_msdb(FloatRegister f1, FloatRegister f3, const Address& a) { z_msdb(f1, f3, a.disp(), a.indexOrR0(), a.baseOrR0()); }
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1210
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1211
57e7b1c75d17 8171398: s390x: Make interpreter's math entries consistent with C1 and C2 and support FMA
mdoerr
parents: 42065
diff changeset
  1212
//---------------
42065
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1213
// DIV
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1214
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1215
inline void Assembler::z_debr( FloatRegister f1, FloatRegister f2)                      { emit_32( DEBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1216
inline void Assembler::z_ddbr( FloatRegister f1, FloatRegister f2)                      { emit_32( DDBR_ZOPC | fregt( f1, 24, 32) | freg( f2, 28, 32));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1217
inline void Assembler::z_deb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( DEB_ZOPC  | fregt( f1, 8, 48)  | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1218
inline void Assembler::z_ddb(  FloatRegister f1, int64_t d2, Register x2, Register b2 ) { emit_48( DDB_ZOPC  | fregt( f1, 8, 48)  | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1219
inline void Assembler::z_deb(  FloatRegister r1, const Address& a)                      { z_deb(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1220
inline void Assembler::z_ddb(  FloatRegister r1, const Address& a)                      { z_ddb(  r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1221
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1222
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1223
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1224
// square root
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1225
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1226
inline void Assembler::z_sqdbr(FloatRegister f1, FloatRegister f2)                       { emit_32(SQDBR_ZOPC | fregt(f1, 24, 32)  | freg(f2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1227
inline void Assembler::z_sqdb( FloatRegister fr1, int64_t d2, Register x2, Register b2 ) { emit_48( SQDB_ZOPC | fregt( fr1, 8, 48) | uimm12( d2, 20, 48) | reg( x2, 12, 48) | regz( b2, 16, 48));}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1228
inline void Assembler::z_sqdb( FloatRegister fr1, int64_t d2, Register b2)               { z_sqdb( fr1, d2, Z_R0, b2);}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1229
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1230
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1231
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1232
// CMP
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1233
//---------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1234
inline void Assembler::z_cebr(FloatRegister r1, FloatRegister r2)                    { emit_32( CEBR_ZOPC | fregt(r1, 24, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1235
inline void Assembler::z_ceb(FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_48( CEB_ZOPC  | fregt(r1, 8, 48) | uimm12(d2, 20, 48) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1236
inline void Assembler::z_ceb(FloatRegister r1, const Address &a)                     { z_ceb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1237
inline void Assembler::z_cdbr(FloatRegister r1, FloatRegister r2)                    { emit_32( CDBR_ZOPC | fregt(r1, 24, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1238
inline void Assembler::z_cdb(FloatRegister r1, int64_t d2, Register x2, Register b2) { emit_48( CDB_ZOPC  | fregt(r1, 8, 48) | uimm12(d2, 20, 48) | reg(x2, 12, 48) | regz(b2, 16, 48)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1239
inline void Assembler::z_cdb(FloatRegister r1, const Address &a)                     { z_cdb(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1240
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1241
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1242
//------------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1243
// FLOAT <-> INT conversion
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1244
//------------------------------------
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1245
inline void Assembler::z_ldgr(FloatRegister r1, Register r2)                  { emit_32( LDGR_ZOPC  | fregt(r1, 24, 32)  | reg(r2, 28, 32));  }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1246
inline void Assembler::z_lgdr(Register r1, FloatRegister r2)                  { emit_32( LGDR_ZOPC  | regt( r1, 24, 32)  | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1247
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1248
inline void Assembler::z_cefbr( FloatRegister r1, Register r2)                { emit_32( CEFBR_ZOPC | fregt( r1, 24, 32) | reg( r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1249
inline void Assembler::z_cdfbr( FloatRegister r1, Register r2)                { emit_32( CDFBR_ZOPC | fregt( r1, 24, 32) | reg( r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1250
inline void Assembler::z_cegbr( FloatRegister r1, Register r2)                { emit_32( CEGBR_ZOPC | fregt( r1, 24, 32) | reg( r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1251
inline void Assembler::z_cdgbr( FloatRegister r1, Register r2)                { emit_32( CDGBR_ZOPC | fregt( r1, 24, 32) | reg( r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1252
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1253
inline void Assembler::z_cfebr(Register r1, FloatRegister r2, RoundingMode m) { emit_32( CFEBR_ZOPC | regt(r1, 24, 32) | rounding_mode(m, 16, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1254
inline void Assembler::z_cfdbr(Register r1, FloatRegister r2, RoundingMode m) { emit_32( CFDBR_ZOPC | regt(r1, 24, 32) | rounding_mode(m, 16, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1255
inline void Assembler::z_cgebr(Register r1, FloatRegister r2, RoundingMode m) { emit_32( CGEBR_ZOPC | regt(r1, 24, 32) | rounding_mode(m, 16, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1256
inline void Assembler::z_cgdbr(Register r1, FloatRegister r2, RoundingMode m) { emit_32( CGDBR_ZOPC | regt(r1, 24, 32) | rounding_mode(m, 16, 32) | freg(r2, 28, 32)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1257
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1258
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1259
  inline void Assembler::z_layz(Register r1, int64_t d2, Register b2)      { z_layz(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1260
  inline void Assembler::z_lay(Register r1, int64_t d2, Register b2)       { z_lay( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1261
  inline void Assembler::z_laz(Register r1, int64_t d2, Register b2)       { z_laz( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1262
  inline void Assembler::z_la(Register r1, int64_t d2, Register b2)        { z_la(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1263
  inline void Assembler::z_l(Register r1, int64_t d2, Register b2)         { z_l(   r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1264
  inline void Assembler::z_ly(Register r1, int64_t d2, Register b2)        { z_ly(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1265
  inline void Assembler::z_lg(Register r1, int64_t d2, Register b2)        { z_lg(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1266
  inline void Assembler::z_st(Register r1, int64_t d2, Register b2)        { z_st(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1267
  inline void Assembler::z_sty(Register r1, int64_t d2, Register b2)       { z_sty( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1268
  inline void Assembler::z_stg(Register r1, int64_t d2, Register b2)       { z_stg( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1269
  inline void Assembler::z_lgf(Register r1, int64_t d2, Register b2)       { z_lgf( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1270
  inline void Assembler::z_lgh(Register r1, int64_t d2, Register b2)       { z_lgh( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1271
  inline void Assembler::z_llgh(Register r1, int64_t d2, Register b2)      { z_llgh(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1272
  inline void Assembler::z_llgf(Register r1, int64_t d2, Register b2)      { z_llgf(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1273
  inline void Assembler::z_lgb(Register r1, int64_t d2, Register b2)       { z_lgb( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1274
  inline void Assembler::z_cl( Register r1, int64_t d2, Register b2)       { z_cl(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1275
  inline void Assembler::z_c(Register r1, int64_t d2, Register b2)         { z_c(   r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1276
  inline void Assembler::z_cg(Register r1, int64_t d2, Register b2)        { z_cg(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1277
  inline void Assembler::z_sh(Register r1, int64_t d2, Register b2)        { z_sh(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1278
  inline void Assembler::z_shy(Register r1, int64_t d2, Register b2)       { z_shy( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1279
  inline void Assembler::z_ste(FloatRegister r1, int64_t d2, Register b2)  { z_ste( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1280
  inline void Assembler::z_std(FloatRegister r1, int64_t d2, Register b2)  { z_std( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1281
  inline void Assembler::z_stdy(FloatRegister r1, int64_t d2, Register b2) { z_stdy(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1282
  inline void Assembler::z_stey(FloatRegister r1, int64_t d2, Register b2) { z_stey(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1283
  inline void Assembler::z_ld(FloatRegister r1, int64_t d2, Register b2)   { z_ld(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1284
  inline void Assembler::z_ldy(FloatRegister r1, int64_t d2, Register b2)  { z_ldy( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1285
  inline void Assembler::z_le(FloatRegister r1, int64_t d2, Register b2)   { z_le(  r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1286
  inline void Assembler::z_ley(FloatRegister r1, int64_t d2, Register b2)  { z_ley( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1287
  inline void Assembler::z_agf(Register r1, int64_t d2, Register b2)       { z_agf( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1288
  inline void Assembler::z_cvd(Register r1, int64_t d2, Register b2)       { z_cvd( r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1289
  inline void Assembler::z_cvdg(Register r1, int64_t d2, Register b2)      { z_cvdg(r1, d2, Z_R0, b2); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1290
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1291
// signed comparison
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1292
inline void Assembler::z_crj(Register r1, Register r2, branch_condition m3, Label& L)   { z_crj(  r1, r2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1293
inline void Assembler::z_cgrj(Register r1, Register r2, branch_condition m3, Label& L)  { z_cgrj( r1, r2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1294
inline void Assembler::z_cij(Register r1, int64_t i2, branch_condition m3, Label& L)    { z_cij(  r1, i2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1295
inline void Assembler::z_cgij(Register r1, int64_t i2, branch_condition m3, Label& L)   { z_cgij( r1, i2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1296
// unsigned comparison
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1297
inline void Assembler::z_clrj(Register r1, Register r2, branch_condition m3, Label& L)  { z_clrj( r1, r2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1298
inline void Assembler::z_clgrj(Register r1, Register r2, branch_condition m3, Label& L) { z_clgrj(r1, r2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1299
inline void Assembler::z_clij(Register r1, int64_t i2, branch_condition m3, Label& L)   { z_clij( r1, i2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1300
inline void Assembler::z_clgij(Register r1, int64_t i2, branch_condition m3, Label& L)  { z_clgij(r1, i2, m3, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1301
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1302
// branch never (nop), branch always
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1303
inline void Assembler::z_nop() { z_bcr(bcondNop, Z_R0); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1304
inline void Assembler::z_br(Register r2) { assert(r2 != Z_R0, "nop if target is Z_R0, use z_nop() instead"); z_bcr(bcondAlways, r2 ); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1305
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1306
inline void Assembler::z_exrl(Register r1, Label& L) { z_exrl(r1, target(L)); }  // z10
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1307
inline void Assembler::z_larl(Register r1, Label& L) { z_larl(r1, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1308
inline void Assembler::z_bru(   Label& L) { z_brc(bcondAlways,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1309
inline void Assembler::z_brul(  Label& L) { z_brcl(bcondAlways,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1310
inline void Assembler::z_brul( address a) { z_brcl(bcondAlways,a); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1311
inline void Assembler::z_brh(   Label& L) { z_brc(bcondHigh,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1312
inline void Assembler::z_brl(   Label& L) { z_brc(bcondLow,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1313
inline void Assembler::z_bre(   Label& L) { z_brc(bcondEqual,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1314
inline void Assembler::z_brnh(  Label& L) { z_brc(bcondNotHigh,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1315
inline void Assembler::z_brnl(  Label& L) { z_brc(bcondNotLow,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1316
inline void Assembler::z_brne(  Label& L) { z_brc(bcondNotEqual,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1317
inline void Assembler::z_brz(   Label& L) { z_brc(bcondZero,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1318
inline void Assembler::z_brnz(  Label& L) { z_brc(bcondNotZero,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1319
inline void Assembler::z_braz(  Label& L) { z_brc(bcondAllZero,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1320
inline void Assembler::z_brnaz( Label& L) { z_brc(bcondNotAllZero,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1321
inline void Assembler::z_brnp(  Label& L) { z_brc( bcondNotPositive, target( L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1322
inline void Assembler::z_btrue( Label& L) { z_brc(bcondAllOne,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1323
inline void Assembler::z_bfalse(Label& L) { z_brc(bcondAllZero,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1324
inline void Assembler::z_brno(  Label& L) { z_brc(bcondNotOrdered,target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1325
inline void Assembler::z_brc( branch_condition m, Label& L) { z_brc(m, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1326
inline void Assembler::z_brcl(branch_condition m, Label& L) { z_brcl(m, target(L)); }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1327
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1328
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1329
// Instruction must start at passed address.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1330
// Extra check for illtraps with ID.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1331
inline int Assembler::instr_len(unsigned char *instr) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1332
  switch ((*instr) >> 6) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1333
    case 0: return 2;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1334
    case 1: // fallthru
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1335
    case 2: return 4;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1336
    case 3: return 6;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1337
    default:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1338
      // Control can't reach here.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1339
      // The switch expression examines just the leftmost two bytes
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1340
      // of the main opcode. So the range of values is just [0..3].
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1341
      // Having a default clause makes the compiler happy.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1342
      ShouldNotReachHere();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1343
      return 0;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1344
  }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1345
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1346
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1347
// Move instr at pc right-justified into passed long int.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1348
// Return instr len in bytes as function result.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1349
// Note: 2-byte instr don't really need to be accessed unsigned
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1350
// because leftmost two bits are always zero. We use
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1351
// unsigned here for reasons of uniformity.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1352
inline unsigned int Assembler::get_instruction(unsigned char *pc, unsigned long *instr) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1353
  unsigned int len = instr_len(pc);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1354
  switch (len) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1355
    case 2:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1356
      *instr = *(unsigned short*) pc; break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1357
    case 4:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1358
      *instr = *(unsigned int*) pc; break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1359
    case 6:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1360
      // Must compose this case. Can't read 8 bytes and then cut off
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1361
      // the rightmost two bytes. Could potentially access
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1362
      // unallocated storage.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1363
      *instr = ((unsigned long)(*(unsigned int*)   pc)) << 16 |
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1364
               ((unsigned long)*(unsigned short*) (pc + 4)); break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1365
    default:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1366
      // Control can't reach here.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1367
      // The length as returned from instr_len() can only be 2, 4, or 6 bytes.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1368
      // Having a default clause makes the compiler happy.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1369
      ShouldNotReachHere();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1370
      break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1371
  }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1372
  return len;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1373
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1374
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1375
// Check if instruction is the expected one.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1376
// Instruction is passed right-justified in inst.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1377
inline bool Assembler::is_equal(unsigned long inst, unsigned long idef) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1378
  unsigned long imask;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1379
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1380
  if ((idef >> 32) != 0) { // 6byte instructions
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1381
    switch (idef >> 40) {  // select mask by main opcode
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1382
      case 0xc0:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1383
      case 0xc2:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1384
      case 0xc4:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1385
      case 0xc6: imask = RIL_MASK; break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1386
      case 0xec:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1387
        if ((idef & 0x00ffL) < 0x0080L) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1388
          imask = RIE_MASK;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1389
          break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1390
        }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1391
        // Fallthru for other sub opcodes.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1392
      default:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1393
#ifdef ASSERT
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1394
        tty->print_cr("inst = %16.16lx, idef = %16.16lx, imask unspecified\n", inst, idef);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1395
        tty->flush();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1396
#endif
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1397
        ShouldNotReachHere();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1398
        return 0;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1399
    }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1400
  } else {                 // 4-byte instructions
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1401
    switch (idef >> 24) {  // Select mask by main opcode.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1402
      case 0x84:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1403
      case 0x85: imask = RSI_MASK; break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1404
      case 0xa5:
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1405
      case 0xa7: imask =  RI_MASK; break;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1406
      case 0xb9: imask = RRE_MASK; break; // RRE_MASK or RRF_MASK. Opcode fields are at same bit positions.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1407
      default: {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1408
#ifdef ASSERT
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1409
        tty->print_cr("inst = %16.16lx, idef = %16.16lx, imask unspecified\n", inst, idef);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1410
        tty->flush();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1411
#endif
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1412
        ShouldNotReachHere();
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1413
        return 0;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1414
      }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1415
    }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1416
  }
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1417
  return (inst & imask) == idef;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1418
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1419
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1420
inline bool Assembler::is_equal(unsigned long inst, unsigned long idef, unsigned long imask) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1421
  assert(imask != 0, "valid instruction mask required");
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1422
  return (inst & imask) == idef;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1423
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1424
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1425
// Check if instruction is the expected one.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1426
// Instruction is passed left-justified at inst.
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1427
inline bool Assembler::is_equal(address iloc, unsigned long idef) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1428
  unsigned long inst;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1429
  get_instruction(iloc, &inst);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1430
  return is_equal(inst, idef);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1431
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1432
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1433
inline bool Assembler::is_equal(address iloc, unsigned long idef, unsigned long imask) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1434
  unsigned long inst;
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1435
  get_instruction(iloc, &inst);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1436
  return is_equal(inst, idef, imask);
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1437
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1438
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1439
inline bool Assembler::is_sigtrap_range_check(address pc) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1440
  return (is_equal(pc, CLFIT_ZOPC, RIE_MASK) || is_equal(pc, CLRT_ZOPC, RRE_MASK));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1441
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1442
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1443
inline bool Assembler::is_sigtrap_zero_check(address pc) {
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1444
  return (is_equal(pc, CGIT_ZOPC, RIE_MASK) || is_equal(pc, CIT_ZOPC, RIE_MASK));
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1445
}
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1446
6032b31e3719 8167673: [s390] The s390 port.
goetz
parents:
diff changeset
  1447
#endif // CPU_S390_VM_ASSEMBLER_S390_INLINE_HPP