/* BEGIN INCLUDE FILE ... op_codes.incl.pl1 */ /* Modified: 25 Apr 1979 by PCK 4-bit decimal */ /* Modified: 6 Jun 1979 by PG to add rank and byte */ /* Modified: 26 Dec 1979 by PCK to add assign_by_name */ /* Modified: 26 July 82 BIM wordno, segno */ dcl ( add initial("000010001"b), /* opnd(1) <- opnd(2)+opnd(3) */ sub initial("000010010"b), /* opnd(1) <- opnd(2)-opnd(3) */ mult initial("000010011"b), /* opnd(1) <- opnd(2)*opnd(3) */ div initial("000010100"b), /* opnd(1) <- opnd(2)/opnd(3) */ negate initial("000010101"b), /* opnd(1) <- -opnd(2) */ exp initial("000010110"b), /* opnd(1) <- opnd(2) ** opnd(3) */ and_bits initial("000100001"b), /* opnd(1) <- opnd(2) & opnd(3) */ or_bits initial("000100010"b), /* opnd(1) <- opnd(2)|opnd(3) */ xor_bits initial("000100011"b), /* opnd(1) <- opnd(2) xor opnd(3) */ not_bits initial("000100100"b), /* opnd(1) <- ^opnd(2) */ cat_string initial("000100101"b), /* opnd(1) <- opnd(2)||opnd(3) */ bool_fun initial("000100110"b), /* opnd(1) <- bool(opnd(2),opnd(3),opnd(4)) */ assign initial("000110001"b), /* opnd(1) <- opnd(2) */ assign_size_ck initial("000110010"b), /* opnd(1) <- opnd(2) */ assign_zero initial("000110011"b), /* opnd(1) <- 0 */ copy_words initial("000110100"b), /* move opnd(2) to opnd(1) by opnd(3) words */ copy_string initial("000110101"b), /* move opnd(2) to opnd(1) by opnd(3) units */ make_desc initial("000110110"b), /* opnd(1) <- descriptor(opnd(2),opnd(3)) */ assign_round initial("000110111"b), /* opnd(1) <- opnd(2) rounded */ pack initial("000111000"b), /* opnd(1) <- encode to picture opnd(2) */ unpack initial("000111001"b), /* opnd(1) <- decode from picture opnd(2) */ less_than initial("001000100"b), /* opnd(1) <- opnd(2) < opnd(3) */ greater_than initial("001000101"b), /* opnd(1) <- opnd(2) > opnd(3) */ equal initial("001000110"b), /* opnd(1) <- opnd(2) = opnd(3) */ not_equal initial("001000111"b), /* opnd(1) <- opnd(2) ^= opnd(3) */ less_or_equal initial("001001000"b), /* opnd(1) <- opnd(2) <= opnd(3) */ greater_or_equal initial("001001001"b), /* opnd(1) <- opnd(2) >= opnd(3) */ jump initial("001010001"b), /* go to opnd(1) unconditionally */ jump_true initial("001010010"b), /* go to opnd(1) if opnd(2) is not 0 */ jump_false initial("001010011"b), /* go to opnd(1) if opnd(2) is all 0 */ jump_if_lt initial("001010100"b), /* go to opnd(1) if opnd(2) < opnd(3) */ jump_if_gt initial("001010101"b), /* go to opnd(1) if opnd(2) > opnd(3) */ jump_if_eq initial("001010110"b), /* go to opnd(1) if opnd(2) = opnd(3) */ jump_if_ne initial("001010111"b), /* go to opnd(1) if opnd(2) ^= opnd(3) */ jump_if_le initial("001011000"b), /* go to opnd(1) if opnd(2) <= opnd(3) */ jump_if_ge initial("001011001"b), /* go to opnd(1) if opnd(2) >= opnd(3) */ std_arg_list initial("001100001"b), /* opnd(1) <- arglist(opnd(2) desclist(opnd(3))) */ return_words initial("001100010"b), /* return aggregate opnd(1), opnd(2) is length in words */ std_call initial("001100011"b), /* opnd(1) <- call opnd(2) with opnd(3) */ return_bits initial("001100100"b), /* return aggregate opnd(1), opnd(2) is length in bits */ std_entry initial("001100101"b), /* entry(opnd(1)... opnd(n)) */ return_string initial("001100110"b), /* return string opnd(1) */ ex_prologue initial("001100111"b), /* execute the prologue -no operands- */ allot_auto initial("001101000"b), /* opnd(1) <- addrel(stack,opnd(2)) */ param_ptr initial("001101001"b), /* opnd(1) <- ptr to opnd(2) in block opnd(3) */ param_desc_ptr initial("001101010"b), /* opnd(1) <- ptr to opnd(2) in block opnd(3) */ std_return initial("001101011"b), /* return -no arguments- */ allot_ctl initial("001101100"b), /* allocate opnd(1) , length in words is opnd(2) */ free_ctl initial("001101101"b), /* free opnd(1) */ stop initial("001101110"b), /* stop - terminate run unit */ mod_bit initial("001110000"b), /* opnd(1) <- mod(opnd(3),36), opnd(2) <- opnd(3) / 36 */ mod_byte initial("001110001"b), /* opnd(1) <- mod(opnd(3),4), opnd(2) <- opnd(3) / 4 */ mod_half initial("001110010"b), /* opnd(1) <- mod(opnd(3),2), opnd(2) <- opnd(3) / 2 */ mod_word initial("001110011"b), /* TO BE DEFINED BY BLW */ bit_to_char initial("010000000"b), /* opnd(1) <- (opnd(2)+8)/9 */ bit_to_word initial("010000001"b), /* opnd(1) <- (opnd(2)+35)/36 */ char_to_word initial("010000010"b), /* opnd(1) <- (opnd(2)+3)/4 */ half_to_word initial("010000011"b), /* opnd(1) <- (opnd(2)+1)/2 */ word_to_mod2 initial("010000100"b), /* opnd(1) <- (opnd(2)+1)/2*2 */ word_to_mod4 initial("010000101"b), /* opnd(1) <- (opnd(2)+3)/4*4 */ word_to_mod8 initial("010000110"b), /* opnd(1) <- (opnd(2)+7)/8*8 */ rel_fun initial("010000111"b), /* opnd(1) <- rel(opnd(2)) */ baseno_fun initial("010001000"b), /* opnd(1) <- baseno(opnd(2)) */ desc_size initial("010001001"b), /* opnd(1) <- substr(opnd(2),13,24) */ bit_pointer initial("010001010"b), /* opnd(1) <- bit offset of opnd(2) */ index_before_fun initial("010001011"b), /* opnd(1) <- length of before(opnd(2),opnd(3)) */ index_after_fun initial("010001100"b), /* opnd(1) <- offset of after(opnd(2),opnd(3)) in opnd(2) */ verify_ltrim_fun initial("010001101"b), /* opnd(1) <- offset of ltrim(opnd(2),opnd(3)) in opnd(2) */ verify_rtrim_fun initial("010001110"b), /* opnd(1) <- length(opnd(2))-length(rtrim(opnd(2),opnd(3))) */ digit_to_bit initial("010001111"b), /* opnd(1) <- 9*opnd(2)/2 */ ceil_fun initial("010010000"b), /* opnd(1) <- ceil(opnd(2)) */ floor_fun initial("010010001"b), /* opnd(1) <- floor(opnd(2)) */ round_fun initial("010010010"b), /* opnd(1) <- round(opnd(2)) */ sign_fun initial("010010011"b), /* opnd(1) <- sign(opnd(2)) */ abs_fun initial("010010100"b), /* opnd(1) <- abs(opnd(2)) */ trunc_fun initial("010010101"b), /* opnd(1) <- trunc(opnd(2)) */ byte_fun initial("010010110"b), /* opnd(1) <- byte(opnd(2)) */ rank_fun initial("010010111"b), /* opnd(1) <- rank(opnd(2)) */ index_rev_fun initial("010011000"b), /* opnd(1) <- index(reverse(opnd(2)),reverse(opnd(3))) */ search_rev_fun initial("010011001"b), /* opnd(1) <- search(reverse(opnd(2)),opnd(3)) */ verify_rev_fun initial("010011010"b), /* opnd(1) <- verify(reverse(opnd(2)),opnd(3)) */ wordno_fun initial("010011011"b), /* opnd(1) <- wordno (opnd(2)) */ segno_fun initial("010011100"b), /* opnd(1) <- segno (opnd(2)) */ bitno_fun initial("010011101"b), /* opnd(1) <- bitno (opnd(2)) */ charno_fun initial("010011110"b), /* opnd(1) <- charno (opnd(2)) */ index_fun initial("010100000"b), /* opnd(1) <- index(opnd(2),opnd(3)) */ off_fun initial("010100001"b), /* opnd(1) <- offset(opnd(2),opnd(3)) */ complex_fun initial("010100010"b), /* opnd(1) <- complex(opnd(2),opnd(3)) */ conjg_fun initial("010100011"b), /* opnd(1) <- conjg(opnd(2),opnd(3)) */ mod_fun initial("010100100"b), /* opnd(1) <- mod(opnd(2),opnd(3)) */ repeat_fun initial("010100101"b), /* opnd(1) <- repeat(opnd(2),opnd(3)) */ verify_fun initial("010100110"b), /* opnd(1) <- verify(opnd(2),opnd(3)) */ translate_fun initial("010100111"b), /* opnd(1) <- translate(opnd(2),opnd(3))*/ real_fun initial("010101001"b), /* opnd(1) <- real(opnd(2)) */ imag_fun initial("010101010"b), /* opnd(1) <- imag(opnd(2)) */ length_fun initial("010101011"b), /* opnd(1) <- length(opnd(2)) */ pl1_mod_fun initial("010101100"b), /* opnd(1) <- mod(opnd(2)) */ search_fun initial("010101101"b), /* opnd(1) <- search(opnd(2),opnd(3)) */ allocation_fun initial("010101110"b), /* opnd(1) <- allocation(opnd(2)) */ reverse_fun initial("010101111"b), /* opnd(1) <- reverse(opnd(2)) */ addr_fun initial("010110000"b), /* opnd(1) <- addr(opnd(2)) */ addr_fun_bits initial("010110001"b), /* opnd(1) <- addr(opnd(2)) */ ptr_fun initial("010110010"b), /* opnd(1) <- ptr(opnd(2),opnd(3)) */ baseptr_fun initial("010110011"b), /* opnd(1) <- baseptr(opnd(2)) */ addrel_fun initial("010110100"b), /* opnd(1) <- addrel(opnd(2),opnd(3)) */ codeptr_fun initial("010110101"b), /* opnd(1) <- codeptr(opnd(2)) */ environmentptr_fun initial("010110110"b), /* opnd(1) <- environmentptr(opnd(2)) */ stackbaseptr_fun initial("010110111"b), /* opnd(1) is ptr to base of current stack */ stackframeptr_fun initial("010111000"b), /* opnd(1) is ptr to current block's stack frame */ setcharno_fun initial("010111001"b), /* opnd(1) <- opnd(2) with charno opnd(3) */ addcharno_fun initial("010111010"b), /* opnd(1) <- opnd(2) with charno = charno + opnd(3) */ setbitno_fun initial("010111011"b), /* setcharno for bitsno */ addbitno_fun initial("010111100"b), /* addcharno for bitno */ min_fun initial("011000000"b), /* opnd(1) <- min(opnd(1),opnd(2),...) */ max_fun initial("011000001"b), /* opnd(1) <- max(opnd(1),opnd(2),...) */ stack_ptr initial("011010001"b), /* opnd(1) <- stack frame ptr */ empty_area initial("011010010"b), /* empty opnd(1), length in words is opnd(2) */ enable_on initial("011010100"b), /* opnd(1) is the cond name opnd(2) is the file name opnd(3) is the block */ revert_on initial("011010101"b), /* opnd(1) is the cond name, opnd(2) is the file name */ signal_on initial("011010110"b), /* opnd(1) is the cond name opnd(2) is the file name */ lock_fun initial("011010111"b), /* opnd(1) <- stac(opnd(2),opnd(3)) */ stacq_fun initial("011011000"b), /* opnd(1) is result, opnd(2) is ptr to lock word, opnd(3) is old value, (4) is new value. */ clock_fun initial("011011001"b), /* opnd(1) is the clock time */ vclock_fun initial("011011010"b), /* opnd(1) is the virtual clock time */ bound_ck initial("011100000"b), /* opnd(1) <- opnd(2) if opnd(3) <= opnd(2) <= opnd(4) */ range_ck initial("011100001"b), /* opnd(1) <- opnd(2) if opnd(3) <= opnd(2) <= opnd(4) */ loop initial("011100010"b), /* do opnd(1) for opnd(2) from opnd(3) to opnd(4) by 1, opnd(5) is the list */ join initial("011100011"b), /* do opnd(1), opnd(2) ... opnd(n) */ allot_based initial("011100100"b), /* allocate opnd(2) words in opnd(3), set opnd(1) */ free_based initial("011100101"b), /* free opnd(1) in opnd(3), length is opnd(2) words */ r_parn initial("011110001"b), /* format op code */ l_parn initial("011110010"b), r_format initial("011110011"b), c_format initial("011110100"b), f_format initial("011110101"b), e_format initial("011110110"b), b_format initial("011110111"b), a_format initial("011111000"b), x_format initial("011111001"b), skip_format initial("011111010"b), column_format initial("011111011"b), page_format initial("011111100"b), line_format initial("011111101"b), picture_format initial("011111110"b), bn_format initial("011111111"b), /* bit format, length(opnd(2)), radix factor(opnd(3)) */ get_list_trans initial("100000000"b), /* getlist(opnd(2) with desc(opnd(1))) */ get_edit_trans initial("100000001"b), /* getedit(opnd(2) with desc(opnd(1))) */ get_data_trans initial("100000010"b), /* getdata(opnd(1) to opnd(n)) */ put_list_trans initial("100000011"b), /* putlist(opnd(2) with desc(opnd(1))) */ put_edit_trans initial("100000100"b), /* putedit(opnd(2) with desc(opnd(1))) */ put_data_trans initial("100000101"b), /* putdata(opnd(2)) with subscript-list opnd(1) */ terminate_trans initial("100000110"b), /* terminate stream transmission */ stream_prep initial("100000111"b), /* initiate stream transmission */ record_io initial("100001000"b), /* perform record io operation */ fortran_read initial("100001001"b), /* A complete read statement */ fortran_write initial("100001010"b), /* A complete write statement */ ftn_file_manip initial("100001011"b), /* endfile,backspace,rewind,etc. */ ftn_trans_loop initial("100001100"b), /* An implied do in i/o list */ put_control initial("100001101"b), /* put control opnd(1) opnd(2) times */ put_field initial("100001110"b), /* putlist(opnd(2)) of length(opnd(1)) */ put_field_chk initial("100001111"b), /* putlist(op(2)) of len(op(1)) check char index(op(3)) */ /* These operators are produced by the parse but are not used as input to the code generator. */ /* They are processed by the semantic translator. */ return_value initial("100010010"b), /* return(opnd(1)) */ allot_var initial("100010011"b), /* allot opnd(1) in opnd(2) */ free_var initial("100010100"b), /* free opnd(1) out of opnd(2) */ get_file initial("100010101"b), /* opnd(1) is filename,opnd(2) is copy */ /* opnd(3) is skip, opnd(4) is list */ get_string initial("100010110"b), /* opnd(1) is string,opnd(2) is list */ put_file initial("100010111"b), /* opnd(1) is filename,opnd(2) is page */ /* opnd(3) is skip,opnd(4) is line */ put_string initial("100011000"b), /* opnd(1) is string,opnd(2) is list */ open_file initial("100011001"b), close_file initial("100011010"b), read_file initial("100011011"b), write_file initial("100011100"b), locate_file initial("100011101"b), do_fun initial("100011110"b), /* opnd(1) is join of a list */ /* opnd(2) is control variable ref */ /* opnd(3) is specification operator */ do_spec initial("100011111"b), /* opnd(1) to opnd(2) by opnd(3) */ /* repeat opnd(4) while opnd(5) */ /* opnd(6) is next specification */ rewrite_file initial("100100000"b), delete_file initial("100100001"b), unlock_file initial("100100010"b), lock_file initial("100100011"b), refer initial("100100101"b), /* opnd(1) refer(opnd(2)) */ prefix_plus initial("100100110"b), /* opnd(1) <- +opnd(2) */ nop initial("100100111"b), /* no-op */ assign_by_name initial("100101000"b), /* opnd(1) <- opnd(2),by name */ /* These operators are produced by the semantic translator in processing the math builtin functions and are used as input to the code generator */ sqrt_fun initial("100110000"b), /* opnd(1) <- sqrt(opnd(2)) */ sin_fun initial("100110001"b), /* opnd(1) <- sin(opnd(2)) */ sind_fun initial("100110010"b), /* opnd(1) <- sind(opnd(2)) */ cos_fun initial("100110011"b), /* opnd(1) <- cos(opnd(2)) */ cosd_fun initial("100110100"b), /* opnd(1) <- cosd(opnd(2)) */ tan_fun initial("100110101"b), /* opnd(1) <- tan(opnd(2)) */ tand_fun initial("100110110"b), /* opnd(1) <- tand(opnd(2)) */ asin_fun initial("100110111"b), /* opnd(1) <- asin(opnd(2)) */ asind_fun initial("100111000"b), /* opnd(1) <- asind(opnd(2)) */ acos_fun initial("100111001"b), /* opnd(1) <- acos(opnd(2)) */ acosd_fun initial("100111010"b), /* opnd(1) <- acosd(opnd(2)) */ atan_fun initial("100111011"b), /* opnd(1) <- atan(opnd(2)[,opnd(3)]) */ atand_fun initial("100111100"b), /* opnd(1) <- atand(opnd(2)[,opnd(3)]) */ log2_fun initial("100111101"b), /* opnd(1) <- log2(opnd(2)) */ log_fun initial("100111110"b), /* opnd(1) <- log(opnd(2)) */ log10_fun initial("100111111"b), /* opnd(1) <- log10(opnd(2)) */ exp_fun initial("101000000"b)) /* opnd(1) <- exp(opnd(2)) */ bit(9) aligned internal static options(constant); /* END INCLUDE FILE ... op_codes.incl.pl1 */ */ ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group Bull including Bull HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell Bull Inc., Groupe Bull and Bull HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, Bull or Bull HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by Bull HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved */