IBM Support

PN91458: ADD SUPPORT FOR NEW OPCODES - BRANCH RELATIVE AND REGISTER IMMEDIATE INSTRUCTIONS

A fix is available

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as new function.

Error description

  • See APAR abstract
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED: High Level Assembler Programs using branch   *
    *                 relative and register immediate instructions *
    *                 These new instructions are available on      *
    *                 CMOS processors.                             *
    ****************************************************************
    * PROBLEM DESCRIPTION: MSGASMA057E when trying to use any of   *
    *                      the new instructions introduced by the  *
    *                      immediate and relative facility.        *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    The new instructions added by the immediate and relative
    instruction facility, the compare and move extended facility
    and  the checksum facility are not in the current opcode tables
    

Problem conclusion

Temporary fix

Comments

  • The instructions have been added to the universal and ESA opcode
    tables.  Additional changes have also been made in ASMA28 and
    ASMA29 in support of the new immediate operands.
    
    Additional information.
    The complete list of mnemonics added by this APAR is
    AHI    BRXH    CLCLE   MSR   J     JO    JM    JNP
    BRAS   BRXLE   LHI     MS    JE    JH    JNL   JNO
    BRC    CKSM    MVCLE   TMH   JZ    JL    JNZ   JNM
    BRCT   CHI     MHI     TML   JNE   JNH   JP
    
    NOTE: Check on applicability of this New Function. The
          new instructions are available on CMOS processors.
    
    The following documentation changes are also required.
    
    SC26-4941 and SC26-8264 HLASM Programmer's Guide
    
    Change the following message as indicated:
    
    ASMA031 Invalid immediate field
    
    Add the following text to the explanation.
    
    For RI and RSI format instructions, this indicates that the
    immediate value lies outside the acceptable range, nominally
    -32768 to 32767.
    
    Add the following messages:
    
    ASMA056 Absolute value found when relocatable value expected
    
    Explanation: An absolute expression has been used as the
    immediate field in a branch-relative instruction.  The immediate
    field in a branch-relative instruction is used as signed number
    of halfwords relative to the current location counter.  The
    use of an absolute expression for this value may cause
    unpredictable results.
    
    System action: The instruction assembles as written
    
    Programmer Response: Supply a relocatable expression.
    
    Severity: 4
    
    ASMA058 Invalid target of branch relative instruction
    
    Explanation: One of the following has occurred:
    
      1) The target expression is not in the same control section
         as the instruction.
      2) The target expression is an odd value and therefore cannot
         be represented as a number of halfwords.
    
    System action: The instruction assembles as zero
    
    Programmer Response: Supply a valid target value that is on a
    halfword boundary and within the same control section.
    
    Severity: 8
    
    SC26-4940 and SC26-8265 HLASM Language Reference
    
    Add the following text and table to the section titled
    'Branching with Extended Mnemonic Codes'
    
    The branch relative on condition instruction, BRC, also has a
    set of extended mnemonics, similar to those used for BC and BCR.
    To avoid any possible confusion with the current mnemonics, the
    branch-relative extended mnemonics all start with the letter J,
    meaning Jump.
    
    Extended Code  Meaning            Format   Machine instruction
                                                   equivalent
    
    J   label      Unconditional Jump   RI     BRC B'1111',label
    JO  label      Jump if Overflow     RI     BRC B'0001',label
    JH  label      Jump if High         RI     BRC B'0010',label
    JP  label      Jump if Positive     RI     BRC B'0010',label
    JL  label      Jump if Low          RI     BRC B'0100',label
    JM  label      Jump if Minus        RI     BRC B'0100',label
    JE  label      Jump if Equal        RI     BRC B'1000',label
    JZ  label      Jump if Zero         RI     BRC B'1000',label
    JNO label      Jump if Not Overflow RI     BRC B'1110',label
    JNH label      Jump if Not High     RI     BRC B'1101',label
    JNP label      Jump if Not Positive RI     BRC B'1101',label
    JNL label      Jump if Not Low      RI     BRC B'1011',label
    JNM label      Jump if Not Minus    RI     BRC B'1011',label
    JNE label      Jump if Not Equal    RI     BRC B'0111',label
    JNZ label      Jump if Not Zero     RI     BRC B'0111',label
    
    In the section titled 'Statement Formats'
    
    Add RI and RSI to the list of formats of length 4
    
    In the section titled 'Addresses'
    
    Add a new section titled 'Relative Address' with the following
    text
    
    A relative address is specified by coding one expression.  The
    expression may be relocatable or absolute.  If a relocatable
    expression is used, then the assembler will convert the value to
    a 16-bit signed number of halfwords relative to the current
    location counter and then use that value in the object code.  An
    absolute value may be used for a relative address, but the
    assembler will issue a warning message as it uses the value
    directly and this may cause unpredictable results.
    
    NOTE: Various statements throughout this manual that all
          addresses must be in base-displacement form are no longer
          valid with the addition of relative addresses to the IBM
          System/390
    
    Change Figure 21 'Format of Addresses in Object Code'
    by adding the following two entries
    
     RI           8          4      4               16
           +-------------+------+------+--------------------------+
           |             |      |Opcode|                          |
           |   Op Code   |  R1  | digit|            I2            |
           |             |      | (0-F)|                          |
           +-------------+------+------+--------------------------+
    
     RSI          8          4      4               16
           +-------------+------+------+--------------------------+
           |             |      |      |                          |
           |   Op Code   |  R1  |  R3  |            I2            |
           |             |      |      |                          |
           +-------------+------+------+--------------------------+
    
    In the section titled 'Examples of Coded Machine Instructions'
    Add two new sections, as follows:
    
    RI Format
    The operand fields of RI-format instructions designate a
    register and a 16-bit immediate operand, with the following
    exception:
    
        In BRC branching instructions, a 4-bit branching mask with
        a value between 0 and 15 inclusive, replaces the register
        designation.
    
    Symbols used to represent registers (See REG1 below) are assumed
    to be equated to absolute values between 0 and 15.  The 16-bit
    immediate operand has two different interpretations, depending
    on whether the instruction is a branching instruction or not.
    
    For non-branching RI-format instructions, the immediate value is
    treated as a 16-bit signed binary integer (that is a value
    between -32768 and +32767).  This value may be specified using
    self-defining terms or equated symbols.
    
    Examples
    
    ALPHA1  AHI  REG1,2000
    ALPHA2  MHI  3,1234
    BETA1   TMH  7,X'8001'
    
    When assembled, the object code for the instruction labeled
    BETA1, in hexadecimal, is
    
    A7708001
    
    where
    
    A7.0    is the operation code
      7     is register R1
    8001    is the immediate data I2
    
    NOTE: All immediate-operand evaluations are performed using
          32-bit arithmetic but only the low order 16 bits are
          placed into the object code.
          As some instructions treat the immediate field as a
          signed value, some results may be unexpected.
    
          For example, the following TMH with a hexadecimal mask
          assembles as expected and will execute as expected
    
          TMH  1,X'8001'     object code is  X'A7108001'
    
          If we change it to a AHI as follows
    
          AHI  1,X'8001'     object code is  X'A71A8001'
    
          this will assemble correctly, but execution will
          use a value of -32767 for the addition.  This is due
          to the interpretation of the immediate field as a signed
          16-bit value.
    
          A similar example is
    
          AHI  1,32769       object code is  X'A71A8001'
    
          which will assemble into the object code as shown, the
          same as the previous example and again a value of
          -32767 will be used for the addition.
    
    NOTE: Later versions of HLASM recognize 2 types of immediate
          data operands for non-branching RI-format instructions
          depending on the type of instruction:
          16-bit signed values       - eg, AHI, LHI
          16-bit logical mask values - eg, TMH, TML
          This means that instructions such as AHI 1,32769 and
          AHI 1,X'8001' will be rejected. To specify -32767 as
          a hexadecimal self-defining term, code:
          AHI  1,X'FFFF8001'.
    
    For branching RI-format instructions, the immediate value is
    treated as a 16-bit signed binary integer representing the
    number of halfwords to branch relative to the current location.
    
    The branch target may be specified as a label in which case
    the assembler will calculate the immediate value and perform
    some checking of the value.
    The branch target may also be specified as an absolute value
    in which case the assembler will issue a warning before it
    assembles the instruction.
    
    Examples
    
    ALPHA1  BRAS 1,BETA1
    ALPHA2  BRC  3,ALPHA1
    BETA1   BRCT 7,ALPHA1
    
    When assembled, the object code for the instruction labeled
    BETA1, in hexadecimal, is
    
    A776FFFC
    
    where
    
    A7.6    is the operation code
      7     is register R1
    FFFC    is the immediate data I2 a value of -4 decimal
    
    
    RSI Format
    The operand fields of RSI-format instructions designate two
    registers and a 16-bit immediate operand.
    
    Symbols used to represent registers (See REG1 below) are assumed
    to be equated to absolute values between 0 and 15.
    
    The immediate value is treated as a 16-bit signed binary integer
    representing the number of halfwords to branch relative to the
    current location.
    
    The branch target may be specified as a label in which case
    the assembler will calculate the immediate value and perform
    some checking of the value.
    The branch target may also be specified as an absolute value
    in which case the assembler will issue a warning before it
    assembles the instruction.
    
    Examples
    
    ALPHA1  BRXH  REG1,REG3,BETA1
    BETA1   BRXLE 1,2,ALPHA1
    
    When assembled, the object code for the instruction labeled
    ALPHA1, in hexadecimal, is
    
    84130002
    
    where
    
    84      is the operation code
    1       is register REG1
    3       is register REG3
    0002    is the immediate data I2 a value of 2 decimal
    

APAR Information

  • APAR number

    PN91458

  • Reported component name

    HLASM MVS, VM &

  • Reported component ID

    569623400

  • Reported release

    120

  • Status

    CLOSED UR1

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    YesSpecatt / New Function / Xsystem

  • Submitted date

    1996-11-22

  • Closed date

    1997-01-09

  • Last modified date

    2000-06-15

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

    UN99927 118PC4Ÿ 118PC4Ÿ UN99930 118PC4Ÿ UN99935 118PC4Ÿ UN99934
    118PC4Ÿ 118PC4Ÿ

Modules/Macros

  • $$ERR    ASMA28   ASMA29   ASMA5ESA ASMA5UNI
    ASMA7DE  ASMA7EN  ASMA7ES  ASMA7JP  ASMA7UE  ASMA9Z   OPCODENT
    OPDEF    OPGEN
    

Fix information

  • Fixed component name

    HLASM MVS, VM &

  • Fixed component ID

    569623400

Applicable component levels

  • R120 PSY UN99930

       UP97/02/11 P F702

  • R189 PSY UN99927

       UP97/02/10 P E221

  • R320 PSY UN99935

       UP97/02/10 P 9702

Fix is available

  • Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.

[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SG19M","label":"APARs - z\/OS environment"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"120","Edition":"","Line of Business":{"code":"","label":""}},{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSENW6","label":"High Level Assembler and Toolkit Feature"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"120","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
15 June 2000