Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!husc6!hao!ames!ucbcad!ucbvax!YMIR.BITNET!NED From: NED@YMIR.BITNET (Ned Freed) Newsgroups: comp.os.vms Subject: Instruction set help file part 4 of 4 Message-ID: <8708092313.AA21227@ucbvax.Berkeley.EDU> Date: Thu, 6-Aug-87 00:42:00 EDT Article-I.D.: ucbvax.8708092313.AA21227 Posted: Thu Aug 6 00:42:00 1987 Date-Received: Mon, 10-Aug-87 00:06:58 EDT Sender: daemon@ucbvax.BERKELEY.EDU Distribution: world Organization: The ARPA Internet Lines: 1299 ==Instruction set help file part 4==cut here==cut here==cut here==cut here== 65FD MULH3 Multiply H__floating 3 operand .index ^Instructions, machine> is set. The mask is scanned from bit 14 to bit 0. Bit 15 is ignored. .if manual .s 1 .endif manual Notes: The time shown assumes R9 only was popped. If R0 only is popped the time is [780-3.20]. If R0 through R9 are popped the time is [780-7.80]. .if manual .test page 10 .send toc .ifnot global .save .flags bold .hl 1 ^*PROBEx instructions\* .restore .send toc .endif global .else manual 2 PROBEx .endif manual .nf Purpose: probe accessibility - verify arguments .if manual .s 1 .endif manual Format: opcode mode.rb,len.rw,base.ab .if manual .s 1 .endif manual Operation: probe__mode = MAXU (mode_<1:0_>, PSL _); condition__codes = {{accessibility of base} AND {accessibilty of (base + ZEXT (len) - 1)} using probe__mode} .if manual .s 1 .endif manual C. Codes: N = 0, V = 0, C = 0, Z = {if {accessible} then 0 else 1} .if manual .s 1 .endif manual Execeptions: Translation not valid .if manual .s 1 .endif manual Opcodes: 0C PROBER Probe read accessibility .index ^Instructions, machine> of the mode operand and the previous mode field of the PSL. Note that probing with a mode operand of 0 is equivalent to probing the previous mode. .if manual .test page 10 .send toc .ifnot global .save .flags bold .hl 1 ^*PUSHAx instructions\* .restore .send toc .endif global .else manual 2 PUSHAx .endif manual .nf Purpose: push address - calculate address of quantity .if manual .s 1 .endif manual Format: opcode src.ax .if manual .s 1 .endif manual Operation: -(SP) = src .if manual .s 1 .endif manual C. Codes: N = {result LSS 0}, Z = {result EQL 0}, V = 0, C = 0 .if manual .s 1 .endif manual Exceptions: None .if manual .s 1 .endif manual Opcodes: 9F PUSHAB Push address of byte [780-1.20] .index ^Instructions, machine> is set. The mask is scanned from bit 14 to bit 0. Bit 15 is ignored. .if manual .s 1 .endif manual Notes: The time shown assumes R9 only is pushed. If R0 only is pushed the time is [780-3.80]. If R0 through R9 are pushed the time is [780-16.20]. .if manual .s 1 .endif manual Example: PUSHR _#_^M_ ;saves R1, R6 and R7 .if manual .test page 10 .send toc .ifnot global .save .flags bold .hl 1 ^*REI instruction\* .restore .send toc .endif global .index ^Instructions, machine> LSSU PSL_} OR {{tmp2_ EQLU 1} AND {PSL_ EQLU 0}} OR {{tmp2_ EQLU 1} AND {tmp2_ NEQU 0}} OR {{tmp2_ EQLU 1} AND {tmp2_ EQLU 0}} OR {{tmp2_ GRTU 0} AND {tmp2_ NEQU 0}} OR {tmp2_ LSSU tmp2_} OR {tmp2_ GTRU PSL_} OR {tmp2_ NEQU 0} then {reserved operand fault}; if {tmp2_ EQLU 1} AND {{tmp2_ NEQU 0} OR {tmp2_ NEQU 3}} then {reserved operand fault}; if PSL_ EQLU 1 then ISP = SP else PSL___SP = SP; if PSL_ EQLU 1 then tmp2_ = 1; PC = tmp1; PSL = tmp2; if PSL_ EQLU 0 then begin SP = PSL___SP; if PSL_ GEQU ASTLVL then {request interrupt at IPL 2}; end; {check for software interrupts} .if manual .s 1 .endif manual C. Codes: N = {saved PSL_<3_>}, Z = {saved PSL_<2_>}, V = {saved PSL_<1_>}, C = {saved PSL_<0_>} .if manual .s 1 .endif manual Exceptions: Reserved operand .if manual .s 1 .endif manual Opcode: 02 REI Return from exception or interrupt .if manual .s 1 .endif manual Description: A longword is popped from the current stack and held in a temporary PC. A second longword is popped and held in a temporary PSL. Validity of the popped PSL is checked. The current stack pointer is saved and a new stack is selected according to the new PSL current__mode and IS fields. The level of the highest privilege AST is checked against the current access mode to see whether a pending AST can be delivered. Execution resumes with the instruction being executed at the time of the exception or interrupt. Any instruction lookahead in the CPU is reinitialized. .if manual .s 1 .endif manual Notes: The exception or interrupt service routine is responsible for restoring any registers saved and removing any parameters from the stack. As usual for faults, any access violation or translation not valid conditions on the stack restore the stack pointer and fault. The noninterrupt stack pointers may be fetched and stored by hardware either in internal registers or in their allocated slots in the Process Control block. MFPR and MTPR always fetch and store the pointers whether in registers or the Process Control Block. .if manual .test page 10 .send toc .ifnot global .save .flags bold .hl 1 ^*REMQUE instruction\* .restore .send toc .endif global .index ^Instructions, machine>, Z = tmp1_<2_>, V = tmp1_<1_>, C = tmp1_<0_> .if manual .s 1 .endif manual Exceptions: Reserved operand .if manual .s 1 .endif manual Opcode: 04 RET Return from procedure [780-4.60] .if manual .s 1 .endif manual Description: SP is replaced with FP plus 4. A longword containing stack alignment in bits 31:30, a CALLS/CALLG flag in bit 29, the low 12 bits of the procedure entry mask in bits 27:16 and a saved PSW in bits 15:0 is popped from the stack and saved in a temporary (tmp1). PC, FP and AP are replaced by longwords popped from the stack. A register restore mask is formed from bits 27:16 of tmp1. Scanning from bit 0 to bit 11 of tmp1, the contents of the registers whose numbers are indicated by set bits in the restore mask are replaced by longwords popped from the stack. SP is incremented by bits 31:30 of tmp1. PSW is replaced by bits 15:0 of tmp1. If bit 29 of tmp1 is 1 (indicating a CALLS was used) a longword containing the number of arguments is popped from the stack. Four times the unsigned value of the low byte of this longword is added to SP and SP is replaced by the result. .if manual .s 1 .endif manual Notes: A reserved operand fault occurs if tmp1_<15:8_> NEQ 0. The condition codes will be unpredictable if a reserved operand fault occurs. The value of bit 28 of tmp1 is ignored. The time shown is for a return from a CALLS where no registers were saved. The corresponding time for a CALLG return is [780-4.20]. If R0 through R9 are saved the times are CALLS - [780-9.60], CALLG - [780-9.20]. No arguments were passed in the CALLS timing examples. .if manual .test page 10 .send toc .ifnot global .save .flags bold .hl 1 ^*ROTL instruction\* .restore .send toc .endif global .index ^Instructions, machine> NEQU 0 then {opcode reserved to Digital fault}; {save process general registers in the process control block}; {remove PSL and PC from stack and save in PCB}; {switch to interrupt stack} .if manual .s 1 .endif manual C. Codes: Not affected .if manual .s 1 .endif manual Exceptions: Reserved operand, privileged instruction .if manual .s 1 .endif manual Opcodes: 07 SVPCTX Load process context .if manual .s 1 .endif manual Description: The process control block is specified by the internal processor register PCBB (process control block base). The general registers are saved in the PCB. If the current stack in use is the kernel stack, execution is changed to the interrupt stack. .if manual .test page 10 .send toc .ifnot global .save .flags bold .hl 1 ^*TSTx instructions\* .restore .send toc .endif global .else manual 2 TSTx .endif manual .nf Purpose: arithmetic compare of a scalar to 0. .if manual .s 1 .endif manual Format: opcode src.rx .if manual .s 1 .endif manual Operation: src - 0 .if manual .s 1 .endif manual C. Codes: N = {src LSS 0}, Z = {src EQL 0}, V = 0, C = 0 .if manual .s 1 .endif manual Exceptions: None (integer), reserved operand (floating) .if manual .s 1 .endif manual Opcodes: 95 TSTB Test byte [780-0.40] .index ^Instructions, machine>