From patchwork Wed Nov 29 20:44:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jens Remus X-Patchwork-Id: 171566 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a5a7:0:b0:403:3b70:6f57 with SMTP id d7csp608389vqn; Wed, 29 Nov 2023 12:44:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IFRIVNfcHJTH9H8wpfm0beElaND4WaScsp/5kMisRg39KeFnGsfO6ix5yvK0aDX5GViwfTy X-Received: by 2002:a05:6358:281a:b0:16d:e966:c36d with SMTP id k26-20020a056358281a00b0016de966c36dmr23437142rwb.7.1701290690294; Wed, 29 Nov 2023 12:44:50 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1701290690; cv=pass; d=google.com; s=arc-20160816; b=TtvoCk5Tzw8HUHaAMFU/fKVQmPhJAu4UqNwadOsP51vXbopFAWdHAlk6HUTWBNVazJ x7CWYQuKE0EMNS1MJxrEjNlAfeD63R1AMTNKZeFO+edafXSMEXvQVHL8FW2iRDF953YN nMPsyVbRkbaz/GJsOKUSfZqXLaBMeAAHl63llMm6c1eEx+g0nsrw1M/oRGEtFRP10hKJ oFtQ+4nSPGvcA7q/6Kk3i+f4Oeu6rIWtm2CVpjCDyyOTFCzNjbam6auyYPs+GmLQAuRf ojMAyncr06u3Kc/2BW3Is/tDEvGhtCBGiomwThJvBthQs5R2XgdiCBRhiWxv6707sYts lXLw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=bhgmR+10cp4j5wi0GiU2zWCEOpVOklJzUcqjkwv9Djo=; fh=lE3HXkiifBSVPU+f05x++3qNjjxlDvLZxwnRCBzavKo=; b=YvU6VT4yoZxGyXcXtMDHG9f0lHxSSDzwB/7mWzgC6UlIEqPoG68g7aAdGrZPXe9bSN sMJCkEMExdqC8K1NGMN14P5psCGdXGB1fuThVJNIUKm8GOWQoS5HfdwOm8IOaGWrc+i5 NiM7zexJV9r3b7A5AFvc7uvArvdcuY1aAsYEnY4QdhwidrcFlS2ZT8E0+ugMOISjJ+Tu IGj8pjGGAqHStujZaD/4aSkUYD8GQYWdiw4Krv87jwATr4k9pU2jV0Mi0vI8QC+r5mxK Pu2DEngwpTwVdxhpdlCQ9wJx4aPi2EadSXuyCZt4LXDLUcJcb/Uz084u+cNw3bEebE1t /JcA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=XQrxvb31; arc=pass (i=1); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=ibm.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id bb5-20020a05622a1b0500b004239801e1c1si12082856qtb.158.2023.11.29.12.44.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 12:44:50 -0800 (PST) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=XQrxvb31; arc=pass (i=1); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=ibm.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0E7EA384F498 for ; Wed, 29 Nov 2023 20:44:50 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id C0E0E3857835 for ; Wed, 29 Nov 2023 20:44:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C0E0E3857835 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C0E0E3857835 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701290685; cv=none; b=oe5J44drpDApzEvICzK09fqiS3tr7d/plpH83cXlQGWI83EC4ZjHVB7BV0GNIN2Ze2RGakP+F303mfnARwPt9/DhQ34jqOkNZiIGyWICCbqxAg39SAZRvF+cRNtDfzo2c/qusMeh35YrKraMdfCc49hSc1CZMvoIHfMY8iB0Mkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701290685; c=relaxed/simple; bh=U4bwDntOdN7JoMQC4AGYo1M0y83EAsXOY6Iu4OZq8LU=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=LtzwUuC/I8aClbE9rePDR4S9LGV0/JCY3lgQ7ZEIwin5p4f8OmAXhTp44uGQeaz+iKXt0Hg4vgoBFL13KJ61tQL0P37peUH31fxJeUXWb5H2KOkEAw+6NH8m/mVguIp+Gi73SdFtHeQUBS9w6b+l3AMP7HEozcUE4/JeJXeh6Gc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0353724.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3ATKbATH023418 for ; Wed, 29 Nov 2023 20:44:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding; s=pp1; bh=bhgmR+10cp4j5wi0GiU2zWCEOpVOklJzUcqjkwv9Djo=; b=XQrxvb31IpFPC7yAlpCbXyrTFHEaAZNg3jdgPO+kqsIi/tZH4Y7yHn86DFrCBDxig0St /7M3GiHv9mzFmhLWHFQ8BYLyV+cKKvafW1CQodCsw7QqugXuIml8RjhhDIpINf5OD6F8 /g32T/yD8odBN+0skKIwwTi18XDsk+i4aDdsfgmeTFEamSxmuaIIdlJ3STXWCAGRUQuv fWp4VetG/1bgADADTQeX0rtBYSLxtiqpmYd6wG6nJctg0x3KPWzu4fy6ikWgi0myOGPe h0AIawAHzdBp160WttW6Me4Ga07fpiJmxNe7vk1pX37nARpSDFRNSWwhx4zQ82lTdmRl CQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3upcg6g8q7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 29 Nov 2023 20:44:41 +0000 Received: from m0353724.ppops.net (m0353724.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3ATKbtx0025715 for ; Wed, 29 Nov 2023 20:44:41 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3upcg6g8py-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Nov 2023 20:44:41 +0000 Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3ATKY1CE001560; Wed, 29 Nov 2023 20:44:40 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 3ukv8nsu2m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Nov 2023 20:44:40 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3ATKibCe20644546 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Nov 2023 20:44:37 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0916C20040; Wed, 29 Nov 2023 20:44:37 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D2ECE20043; Wed, 29 Nov 2023 20:44:36 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 29 Nov 2023 20:44:36 +0000 (GMT) From: Jens Remus To: binutils@sourceware.org Cc: Jens Remus , Andreas Krebbel , Nick Clifton Subject: [PATCH] s390: Support for jump visualization in disassembly Date: Wed, 29 Nov 2023 21:44:34 +0100 Message-Id: <20231129204434.2880380-1-jremus@linux.ibm.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: cOfMpE3wzaQliXox9Tpoh0J7OR3RMfwf X-Proofpoint-ORIG-GUID: IfCqJz8n7YIoGhL0rTqEsgsb4kDEaK3r X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-29_19,2023-11-29_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 adultscore=0 mlxscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 mlxlogscore=999 priorityscore=1501 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311290159 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, HEXHASH_WORD, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783932586898211573 X-GMAIL-MSGID: 1783932586898211573 Add support for jump visualization for the s390 architecture in disassembly: objdump -d --visualize-jumps ... Annotate the (conditional) jump and branch relative instructions with information required for jump visualization: - jump: Unconditional jump / branch relative. - condjump: Conditional jump / branch relative. - jumpsr: Jump / branch relative to subroutine. Unconditional jump and branch relative instructions are annotated as jump. Conditional jump and branch relative instructions, jump / branch relative on count/index, and compare and jump / branch relative instructions are annotated as condjump. Jump and save (jas, jasl) and branch relative and save (bras, brasl) instructions are annotated as jumpsr (jump to subroutine). Provide instruction information required for jump visualization during disassembly. The instruction type is provided after determining the opcode. For non-code it is set to dis_noninsn. Otherwise it defaults to dis_nonbranch. No annotation is done for data reference instructions (i.e. instruction types dis_dref and dis_dref2). Note that the instruction type needs to be provided before printing of the instruction, as it is used in print_address_func() to translate the argument value into an address if it is assumed to be a PC-relative offset. Note that this is never the case on s390, as print_address_func() is only called with addresses and never with offsets. The target of the (conditional) jump and branch relative instructions is provided during print, when the PC relative operand is decoded. include/ * opcode/s390.h: Define opcode flags to annotate instruction class information for jump visualization: S390_INSTR_FLAG_CLASS_BRANCH, S390_INSTR_FLAG_CLASS_RELATIVE, S390_INSTR_FLAG_CLASS_CONDITIONAL, and S390_INSTR_FLAG_CLASS_SUBROUTINE. Define opcode flags mask S390_INSTR_FLAG_CLASS_MASK for above instruction class information. Define helpers for common instruction class flag combinations: S390_INSTR_FLAGS_CLASS_JUMP, S390_INSTR_FLAGS_CLASS_CONDJUMP, and S390_INSTR_FLAGS_CLASS_JUMPSR. opcodes/ * s390-mkopc.c: Add opcode flags to annotate information for jump visualization: jump, condjump, and jumpsr. * s390-opc.txt: Annotate (conditional) jump and branch relative instructions with information for jump visualization. * s390-dis.c (print_insn_s390, s390_print_insn_with_opcode): Provide instruction information for jump visualization. Signed-off-by: Jens Remus Reviewed-by: Andreas Krebbel --- binutils/NEWS | 2 ++ include/opcode/s390.h | 25 +++++++++++-- opcodes/s390-dis.c | 36 ++++++++++++++++++- opcodes/s390-mkopc.c | 12 +++++++ opcodes/s390-opc.txt | 82 +++++++++++++++++++++---------------------- 5 files changed, 112 insertions(+), 45 deletions(-) diff --git a/binutils/NEWS b/binutils/NEWS index 3bf3b568179..73df7053be4 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -17,6 +17,8 @@ * objcopy --set-section-flags now supports "large" to set SHF_X86_64_LARGE for ELF x86-64 objects. +* objdump --visualize-jumps is now supported on s390 architecture. + Changes in 2.41: * The MIPS port now supports the Sony Interactive Entertainment Allegrex diff --git a/include/opcode/s390.h b/include/opcode/s390.h index f787b901632..d540e1dfd00 100644 --- a/include/opcode/s390.h +++ b/include/opcode/s390.h @@ -48,14 +48,35 @@ enum s390_opcode_cpu_val S390_OPCODE_MAXCPU }; -/* Instruction specific flags. */ +/* Values defined for the flags field of a struct s390_opcode. */ + +/* Last one or two instruction operands are optional. */ #define S390_INSTR_FLAG_OPTPARM 0x1 #define S390_INSTR_FLAG_OPTPARM2 0x2 +/* Instruction requires a specific facility. */ #define S390_INSTR_FLAG_HTM 0x4 #define S390_INSTR_FLAG_VX 0x8 #define S390_INSTR_FLAG_FACILITY_MASK 0xc +/* Instruction annotations for jump visualization. */ +#define S390_INSTR_FLAG_CLASS_BRANCH 0x10 +#define S390_INSTR_FLAG_CLASS_RELATIVE 0x20 +#define S390_INSTR_FLAG_CLASS_CONDITIONAL 0x40 +#define S390_INSTR_FLAG_CLASS_SUBROUTINE 0x80 +#define S390_INSTR_FLAG_CLASS_MASK 0xf0 + +#define S390_INSTR_FLAGS_CLASS_JUMP \ + (S390_INSTR_FLAG_CLASS_BRANCH | S390_INSTR_FLAG_CLASS_RELATIVE) + +#define S390_INSTR_FLAGS_CLASS_CONDJUMP \ + (S390_INSTR_FLAG_CLASS_BRANCH | S390_INSTR_FLAG_CLASS_RELATIVE \ + | S390_INSTR_FLAG_CLASS_CONDITIONAL) + +#define S390_INSTR_FLAGS_CLASS_JUMPSR \ + (S390_INSTR_FLAG_CLASS_BRANCH | S390_INSTR_FLAG_CLASS_RELATIVE \ + | S390_INSTR_FLAG_CLASS_SUBROUTINE) + /* The opcode table is an array of struct s390_opcode. */ struct s390_opcode @@ -101,8 +122,6 @@ extern const int s390_num_opcodes; extern const struct s390_opcode s390_opformats[]; extern const int s390_num_opformats; -/* Values defined for the flags field of a struct s390_opcode. */ - /* The operands table is an array of struct s390_operand. */ struct s390_operand diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c index 2a3b4c21c3a..8c8a98c4e24 100644 --- a/opcodes/s390-dis.c +++ b/opcodes/s390-dis.c @@ -26,6 +26,7 @@ #include "opintl.h" #include "opcode/s390.h" #include "libiberty.h" +#include "dis-asm.h" static int opc_index[256]; static int current_arch_mask = 0; @@ -259,9 +260,14 @@ s390_print_insn_with_opcode (bfd_vma memaddr, } else if (flags & S390_OPERAND_PCREL) { + bfd_vma target = memaddr + val.i + val.i; + + /* Provide info for jump visualization. May be evaluated by p_a_f(). */ + info->target = target; + info->fprintf_styled_func (info->stream, dis_style_text, "%c", separator); - info->print_address_func (memaddr + val.i + val.i, info); + info->print_address_func (target, info); } else if (flags & S390_OPERAND_SIGNED) { @@ -332,6 +338,14 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) /* The output looks better if we put 6 bytes on a line. */ info->bytes_per_line = 6; + /* Set some defaults for the insn info. */ + info->insn_info_valid = 0; + info->branch_delay_insns = 0; + info->data_size = 0; + info->insn_type = dis_nonbranch; + info->target = 0; + info->target2 = 0; + /* Every S390 instruction is max 6 bytes long. */ memset (buffer, 0, 6); status = info->read_memory_func (memaddr, buffer, 6, info); @@ -373,6 +387,23 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) if (opcode != NULL) { + /* Provide info for jump visualization. Must be done before print. */ + switch (opcode->flags & S390_INSTR_FLAG_CLASS_MASK) + { + case S390_INSTR_FLAGS_CLASS_JUMP: + info->insn_type = dis_branch; + break; + case S390_INSTR_FLAGS_CLASS_CONDJUMP: + info->insn_type = dis_condbranch; + break; + case S390_INSTR_FLAGS_CLASS_JUMPSR: + info->insn_type = dis_jsr; + break; + default: + info->insn_type = dis_nonbranch; + } + info->insn_info_valid = 1; + /* The instruction is valid. Print it and return its size. */ s390_print_insn_with_opcode (memaddr, info, buffer, opcode); return opsize; @@ -394,6 +425,9 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) if (bytes_to_dump == 0) return 0; + info->insn_type = dis_noninsn; + info->insn_info_valid = 1; + /* Fall back to hex print. */ switch (bytes_to_dump) { diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c index 48b1c1e0cdb..5f921ee0628 100644 --- a/opcodes/s390-mkopc.c +++ b/opcodes/s390-mkopc.c @@ -431,6 +431,18 @@ main (void) && (str[2] == 0 || str[2] == ',')) { flag_bits |= S390_INSTR_FLAG_VX; str += 2; + } else if (strncmp (str, "jump", 7) == 0 + && (str[4] == 0 || str[4] == ',')) { + flag_bits |= S390_INSTR_FLAGS_CLASS_JUMP; + str += 4; + } else if (strncmp (str, "condjump", 7) == 0 + && (str[8] == 0 || str[8] == ',')) { + flag_bits |= S390_INSTR_FLAGS_CLASS_CONDJUMP; + str += 8; + } else if (strncmp (str, "jumpsr", 7) == 0 + && (str[6] == 0 || str[6] == ',')) { + flag_bits |= S390_INSTR_FLAGS_CLASS_JUMPSR; + str += 6; } else { fprintf (stderr, "Couldn't parse flags string %s\n", flags_string); diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt index 853758b96aa..0fd04ee2770 100644 --- a/opcodes/s390-opc.txt +++ b/opcodes/s390-opc.txt @@ -245,15 +245,15 @@ d7 xc SS_L0RDRD "exclusive OR" g5 esa,zarch 17 xr RR_RR "exclusive OR" g5 esa,zarch f8 zap SS_LLRDRD "zero and add" g5 esa,zarch a70a ahi RI_RI "add halfword immediate" g5 esa,zarch -84 brxh RSI_RRP "branch relative on index high" g5 esa,zarch -84 jxh RSI_RRP "branch relative on index high" g5 esa,zarch -85 brxle RSI_RRP "branch relative on index low or equal" g5 esa,zarch -85 jxle RSI_RRP "branch relative on index low or equal" g5 esa,zarch -a705 bras RI_RP "branch relative and save" g5 esa,zarch -a705 jas RI_RP "branch relative and save" g5 esa,zarch -a704 brc RI_UP "branch relative on condition" g5 esa,zarch -a706 brct RI_RP "branch relative on count" g5 esa,zarch -a706 jct RI_RP "branch relative on count" g5 esa,zarch +84 brxh RSI_RRP "branch relative on index high" g5 esa,zarch condjump +84 jxh RSI_RRP "branch relative on index high" g5 esa,zarch condjump +85 brxle RSI_RRP "branch relative on index low or equal" g5 esa,zarch condjump +85 jxle RSI_RRP "branch relative on index low or equal" g5 esa,zarch condjump +a705 bras RI_RP "branch relative and save" g5 esa,zarch jumpsr +a705 jas RI_RP "branch relative and save" g5 esa,zarch jumpsr +a704 brc RI_UP "branch relative on condition" g5 esa,zarch condjump +a706 brct RI_RP "branch relative on count" g5 esa,zarch condjump +a706 jct RI_RP "branch relative on count" g5 esa,zarch condjump b241 cksm RRE_RR "checksum" g5 esa,zarch a70e chi RI_RI "compare halfword immediate" g5 esa,zarch a9 clcle RS_RRRD "compare logical long extended" g5 esa,zarch @@ -272,12 +272,12 @@ a701 tml RI_RU "test under mask low" g5 esa,zarch 4700 nop RX_0RRD "no operation" g5 esa,zarch optparm 4700 b*8 RX_0RRD "conditional branch" g5 esa,zarch 47f0 b RX_0RRD "unconditional branch" g5 esa,zarch -a704 jc RI_UP "conditional jump" g5 esa,zarch +a704 jc RI_UP "conditional jump" g5 esa,zarch condjump a704 jnop RI_0P "nop jump" g5 esa,zarch -a704 j*8 RI_0P "conditional jump" g5 esa,zarch -a704 br*8 RI_0P "conditional jump" g5 esa,zarch -a7f4 j RI_0P "unconditional jump" g5 esa,zarch -a7f4 bru RI_0P "unconditional jump" g5 esa,zarch +a704 j*8 RI_0P "conditional jump" g5 esa,zarch condjump +a704 br*8 RI_0P "conditional jump" g5 esa,zarch condjump +a7f4 j RI_0P "unconditional jump" g5 esa,zarch jump +a7f4 bru RI_0P "unconditional jump" g5 esa,zarch jump b34a axbr RRE_FEFE "add extended bfp" g5 esa,zarch b31a adbr RRE_FF "add long bfp" g5 esa,zarch ed000000001a adb RXE_FRRD "add long bfp" g5 esa,zarch @@ -446,10 +446,10 @@ e3000000000b slg RXE_RRRD "subtract logical 64" z900 zarch e3000000001b slgf RXE_RRRD "subtract logical 64<32" z900 zarch e3000000000c msg RXE_RRRD "multiply single 64" z900 zarch e3000000001c msgf RXE_RRRD "multiply single 64<32" z900 zarch -ec0000000044 brxhg RIE_RRP "branch relative on index high 64" z900 zarch -ec0000000044 jxhg RIE_RRP "branch relative on index high 64" z900 zarch -ec0000000045 brxlg RIE_RRP "branch relative on index low or equal 64" z900 zarch -ec0000000045 jxleg RIE_RRP "branch relative on index low or equal 64" z900 zarch +ec0000000044 brxhg RIE_RRP "branch relative on index high 64" z900 zarch condjump +ec0000000044 jxhg RIE_RRP "branch relative on index high 64" z900 zarch condjump +ec0000000045 brxlg RIE_RRP "branch relative on index low or equal 64" z900 zarch condjump +ec0000000045 jxleg RIE_RRP "branch relative on index low or equal 64" z900 zarch condjump eb0000000044 bxhg RSE_RRRD "branch on index high 64" z900 zarch eb0000000045 bxleg RSE_RRRD "branch on index low or equal 64" z900 zarch eb000000000c srlg RSE_RRRD "shift right single logical 64" z900 zarch @@ -473,18 +473,18 @@ eb000000002c stcmh RSE_RURD "store characters under mask high" z900 zarch eb0000000080 icmh RSE_RURD "insert characters under mask high" z900 zarch a702 tmhh RI_RU "test under mask high high" z900 zarch a703 tmhl RI_RU "test under mask high low" z900 zarch -c004 brcl RIL_UP "branch relative on condition long" z900 esa,zarch +c004 brcl RIL_UP "branch relative on condition long" z900 esa,zarch condjump # jlc omitted due to missing jl* (see jl*8) and not added as non-standard jgc c004 jgnop RIL_0P "nop jump long" z900 esa,zarch -c004 jg*8 RIL_0P "conditional jump long" z900 esa,zarch +c004 jg*8 RIL_0P "conditional jump long" z900 esa,zarch condjump # jl*8 omitted due to clash with non-standard j*8 flavors jle and jlh; exists as non-standard jg*8 instead -c004 br*8l RIL_0P "conditional jump long" z900 esa,zarch -c0f4 jg RIL_0P "unconditional jump long" z900 esa,zarch -c0f4 brul RIL_0P "unconditional jump long" z900 esa,zarch -c005 brasl RIL_RP "branch relative and save long" z900 esa,zarch -c005 jasl RIL_RP "branch relative and save long" z900 esa,zarch -a707 brctg RI_RP "branch relative on count 64" z900 zarch -a707 jctg RI_RP "branch relative on count 64" z900 zarch +c004 br*8l RIL_0P "conditional jump long" z900 esa,zarch condjump +c0f4 jg RIL_0P "unconditional jump long" z900 esa,zarch jump +c0f4 brul RIL_0P "unconditional jump long" z900 esa,zarch jump +c005 brasl RIL_RP "branch relative and save long" z900 esa,zarch jumpsr +c005 jasl RIL_RP "branch relative and save long" z900 esa,zarch jumpsr +a707 brctg RI_RP "branch relative on count 64" z900 zarch condjump +a707 jctg RI_RP "branch relative on count 64" z900 zarch condjump a709 lghi RI_RI "load halfword immediate 64" z900 zarch a70b aghi RI_RI "add halfword immediate 64" z900 zarch a70d mghi RI_RI "multiply halfword immediate 64" z900 zarch @@ -896,18 +896,18 @@ ec00000000f6 crb$32 RRS_RRRD0 "compare and branch (32)" z10 zarch ec00000000f6 crb RRS_RRRDU "compare and branch (32)" z10 zarch ec00000000e4 cgrb$32 RRS_RRRD0 "compare and branch (64)" z10 zarch ec00000000e4 cgrb RRS_RRRDU "compare and branch (64)" z10 zarch -ec0000000076 crj$32 RIE_RRP0 "compare and branch relative (32)" z10 zarch -ec0000000076 crj RIE_RRPU "compare and branch relative (32)" z10 zarch -ec0000000064 cgrj$32 RIE_RRP0 "compare and branch relative (64)" z10 zarch -ec0000000064 cgrj RIE_RRPU "compare and branch relative (64)" z10 zarch +ec0000000076 crj$32 RIE_RRP0 "compare and branch relative (32)" z10 zarch condjump +ec0000000076 crj RIE_RRPU "compare and branch relative (32)" z10 zarch condjump +ec0000000064 cgrj$32 RIE_RRP0 "compare and branch relative (64)" z10 zarch condjump +ec0000000064 cgrj RIE_RRPU "compare and branch relative (64)" z10 zarch condjump ec00000000fe cib$12 RIS_R0RDI "compare immediate and branch (32<8)" z10 zarch ec00000000fe cib RIS_RURDI "compare immediate and branch (32<8)" z10 zarch ec00000000fc cgib$12 RIS_R0RDI "compare immediate and branch (64<8)" z10 zarch ec00000000fc cgib RIS_RURDI "compare immediate and branch (64<8)" z10 zarch -ec000000007e cij$12 RIE_R0PI "compare immediate and branch relative (32<8)" z10 zarch -ec000000007e cij RIE_RUPI "compare immediate and branch relative (32<8)" z10 zarch -ec000000007c cgij$12 RIE_R0PI "compare immediate and branch relative (64<8)" z10 zarch -ec000000007c cgij RIE_RUPI "compare immediate and branch relative (64<8)" z10 zarch +ec000000007e cij$12 RIE_R0PI "compare immediate and branch relative (32<8)" z10 zarch condjump +ec000000007e cij RIE_RUPI "compare immediate and branch relative (32<8)" z10 zarch condjump +ec000000007c cgij$12 RIE_R0PI "compare immediate and branch relative (64<8)" z10 zarch condjump +ec000000007c cgij RIE_RUPI "compare immediate and branch relative (64<8)" z10 zarch condjump b9720000 crt$16 RRF_00RR "compare and trap" z10 zarch b972 crt RRF_U0RR "compare and trap" z10 zarch b9600000 cgrt$16 RRF_00RR "compare and trap 64" z10 zarch @@ -934,10 +934,10 @@ ec00000000f7 clrb$32 RRS_RRRD0 "compare logical and branch (32)" z10 zarch ec00000000f7 clrb RRS_RRRDU "compare logical and branch (32)" z10 zarch ec00000000e5 clgrb$32 RRS_RRRD0 "compare logical and branch (64)" z10 zarch ec00000000e5 clgrb RRS_RRRDU "compare logical and branch (64)" z10 zarch -ec0000000077 clrj$32 RIE_RRP0 "compare logical and branch relative (32)" z10 zarch -ec0000000077 clrj RIE_RRPU "compare logical and branch relative (32)" z10 zarch -ec0000000065 clgrj$32 RIE_RRP0 "compare logical and branch relative (64)" z10 zarch -ec0000000065 clgrj RIE_RRPU "compare logical and branch relative (64)" z10 zarch +ec0000000077 clrj$32 RIE_RRP0 "compare logical and branch relative (32)" z10 zarch condjump +ec0000000077 clrj RIE_RRPU "compare logical and branch relative (32)" z10 zarch condjump +ec0000000065 clgrj$32 RIE_RRP0 "compare logical and branch relative (64)" z10 zarch condjump +ec0000000065 clgrj RIE_RRPU "compare logical and branch relative (64)" z10 zarch condjump ec00000000ff clib$12 RIS_R0RDU "compare logical immediate and branch (32<8)" z10 zarch ec00000000ff clib RIS_RURDU "compare logical immediate and branch (32<8)" z10 zarch ec00000000fd clgib$12 RIS_R0RDU "compare logical immediate and branch (64<8)" z10 zarch @@ -1011,8 +1011,8 @@ b9ca alhhhr RRF_R0RR2 "add logical high high" z196 zarch b9da alhhlr RRF_R0RR2 "add logical high low" z196 zarch cc0a alsih RIL_RI "add logical with signed immediate high with cc" z196 zarch cc0b alsihn RIL_RI "add logical with signed immediate high no cc" z196 zarch -cc06 brcth RIL_RP "branch relative on count high" z196 zarch -cc06 jcth RIL_RP "jump on count high" z196 zarch +cc06 brcth RIL_RP "branch relative on count high" z196 zarch condjump +cc06 jcth RIL_RP "jump on count high" z196 zarch condjump b9cd chhr RRE_RR "compare high high" z196 zarch b9dd chlr RRE_RR "compare high low" z196 zarch e300000000cd chf RXY_RRRD "compare high" z196 zarch