3 * rx-decode.opc (bwl): Use RX_Bad_Size.
5 (ubwl): Likewise. Rename to ubw.
7 Replace all references to uBWL with uBW.
8 * rx-decode.c: Regenerate.
9 * rx-dis.c (size_names): Add entry for RX_Bad_Size.
10 (opsize_names): Likewise.
11 (print_insn_rx): Detect and report RX_Bad_Size.
15 * ppc-opc.c (powerpc_opcodes): Add mfdscr, mfctrl, mtdscr and mtctrl.
19 * sparc-dis.c (print_insn_sparc): Handle the privileged register
24 * i386-dis.c (print_insn): Fix decoding of three byte operands.
29 * i386-dis.c: Use MOD_TABLE for most of mask instructions.
30 (MOD enum): Add MOD_VEX_W_0_0F41_P_0_LEN_1,
31 MOD_VEX_W_1_0F41_P_0_LEN_1, MOD_VEX_W_0_0F41_P_2_LEN_1,
32 MOD_VEX_W_1_0F41_P_2_LEN_1, MOD_VEX_W_0_0F42_P_0_LEN_1,
33 MOD_VEX_W_1_0F42_P_0_LEN_1, MOD_VEX_W_0_0F42_P_2_LEN_1,
34 MOD_VEX_W_1_0F42_P_2_LEN_1, MOD_VEX_W_0_0F44_P_0_LEN_1,
35 MOD_VEX_W_1_0F44_P_0_LEN_1, MOD_VEX_W_0_0F44_P_2_LEN_1,
36 MOD_VEX_W_1_0F44_P_2_LEN_1, MOD_VEX_W_0_0F45_P_0_LEN_1,
37 MOD_VEX_W_1_0F45_P_0_LEN_1, MOD_VEX_W_0_0F45_P_2_LEN_1,
38 MOD_VEX_W_1_0F45_P_2_LEN_1, MOD_VEX_W_0_0F46_P_0_LEN_1,
39 MOD_VEX_W_1_0F46_P_0_LEN_1, MOD_VEX_W_0_0F46_P_2_LEN_1,
40 MOD_VEX_W_1_0F46_P_2_LEN_1, MOD_VEX_W_0_0F47_P_0_LEN_1,
41 MOD_VEX_W_1_0F47_P_0_LEN_1, MOD_VEX_W_0_0F47_P_2_LEN_1,
42 MOD_VEX_W_1_0F47_P_2_LEN_1, MOD_VEX_W_0_0F4A_P_0_LEN_1,
43 MOD_VEX_W_1_0F4A_P_0_LEN_1, MOD_VEX_W_0_0F4A_P_2_LEN_1,
44 MOD_VEX_W_1_0F4A_P_2_LEN_1, MOD_VEX_W_0_0F4B_P_0_LEN_1,
45 MOD_VEX_W_1_0F4B_P_0_LEN_1, MOD_VEX_W_0_0F4B_P_2_LEN_1,
46 MOD_VEX_W_0_0F91_P_0_LEN_0, MOD_VEX_W_1_0F91_P_0_LEN_0,
47 MOD_VEX_W_0_0F91_P_2_LEN_0, MOD_VEX_W_1_0F91_P_2_LEN_0,
48 MOD_VEX_W_0_0F92_P_0_LEN_0, MOD_VEX_W_0_0F92_P_2_LEN_0,
49 MOD_VEX_W_0_0F92_P_3_LEN_0, MOD_VEX_W_1_0F92_P_3_LEN_0,
50 MOD_VEX_W_0_0F93_P_0_LEN_0, MOD_VEX_W_0_0F93_P_2_LEN_0,
51 MOD_VEX_W_0_0F93_P_3_LEN_0, MOD_VEX_W_1_0F93_P_3_LEN_0,
52 MOD_VEX_W_0_0F98_P_0_LEN_0, MOD_VEX_W_1_0F98_P_0_LEN_0,
53 MOD_VEX_W_0_0F98_P_2_LEN_0, MOD_VEX_W_1_0F98_P_2_LEN_0,
54 MOD_VEX_W_0_0F99_P_0_LEN_0, MOD_VEX_W_1_0F99_P_0_LEN_0,
55 MOD_VEX_W_0_0F99_P_2_LEN_0, MOD_VEX_W_1_0F99_P_2_LEN_0,
56 MOD_VEX_W_0_0F3A30_P_2_LEN_0, MOD_VEX_W_1_0F3A30_P_2_LEN_0,
57 MOD_VEX_W_0_0F3A31_P_2_LEN_0, MOD_VEX_W_1_0F3A31_P_2_LEN_0,
58 MOD_VEX_W_0_0F3A32_P_2_LEN_0, MOD_VEX_W_1_0F3A32_P_2_LEN_0,
59 MOD_VEX_W_0_0F3A33_P_2_LEN_0, MOD_VEX_W_1_0F3A33_P_2_LEN_0.
60 (vex_w_table): Replace terminals with MOD_TABLE entries for
61 most of mask instructions.
65 * cgen.sh: Trim trailing space from cgen output.
66 * ia64-gen.c (print_dependency_table): Don't generate trailing space.
67 (print_dis_table): Likewise.
68 * opc2c.c (dump_lines): Likewise.
69 (orig_filename): Warning fix.
70 * ia64-asmtab.c: Regenerate.
74 * arm-dis.c (print_insn_arm): Disassembling for all targets V6
75 and higher with ARM instruction set will now mark the 26-bit
76 versions of teq,tst,cmn and cmp as UNPREDICTABLE.
77 (arm_opcodes): Fix for unpredictable nop being recognized as a
82 * micromips-opc.c (micromips_opcodes): Re-order table so that move
83 based on 'or' is first.
84 * mips-opc.c (mips_builtin_opcodes): Ditto.
89 * aarch64-tbl.h (aarch64_opcode_table): Fix mask for SIMD EXT
94 * mips-opc.c (mips_builtin_opcodes): Add "sigrie".
98 * i386-gen.c: Remove CpuFMA4 from CPU_ZNVER1_FLAGS.
99 * i386-init.h: Regenerated.
104 * i386-dis.c (MOD_0FC3): New.
105 (PREFIX_0FC3): Renamed to ...
106 (PREFIX_MOD_0_0FC3): This.
107 (dis386_twobyte): Replace PREFIX_0FC3 with MOD_0FC3.
108 (prefix_table): Replace Ma with Ev on movntiS.
109 (mod_table): Add MOD_0FC3.
113 * configure: Regenerated.
118 * i386-dis.c (get64): Avoid signed integer overflow.
123 * i386-dis-evex.h (EVEX_W_0F78_P_2): Replace "EXxmmq" with
124 "EXEvexHalfBcstXmmq" for the second operand.
125 (EVEX_W_0F79_P_2): Likewise.
126 (EVEX_W_0F7A_P_2): Likewise.
127 (EVEX_W_0F7B_P_2): Likewise.
131 * arm-dis.c (print_insn_coprocessor): Added support for quarter
132 float bitfield format.
133 (coprocessor_opcodes): Changed VFP vmov reg,immediate to use new
134 quarter float bitfield format.
138 * configure: Regenerated.
142 * ppc-opc.c (PPC750, PPC7450, PPC860): Define using PPC_OPCODE_*.
143 * ppc-dis.c (ppc_opts): Add 821, 850 and 860 entries. Add
144 PPC_OPCODE_7450 to 7450 entry. Add PPC_OPCODE_750 to 750cl entry.
149 * nios2-dis.c (nios2_extract_opcode): New.
150 (nios2_disassembler_state): New.
151 (nios2_find_opcode_hash): Use mach parameter to select correct
153 (nios2_print_insn_arg): Extend to support new R2 argument letters
155 (print_insn_nios2): Check for 16-bit instruction at end of memory.
156 * nios2-opc.c (nios2_builtin_regs): Add R2 register attributes.
157 (NIOS2_NUM_OPCODES): Rename to...
158 (NIOS2_NUM_R1_OPCODES): This.
159 (nios2_r2_opcodes): New.
160 (NIOS2_NUM_R2_OPCODES): New.
161 (nios2_num_r2_opcodes): New.
162 (nios2_r2_asi_n_mappings, nios2_num_r2_asi_n_mappings): New.
163 (nios2_r2_shi_n_mappings, nios2_num_r2_shi_n_mappings): New.
164 (nios2_r2_andi_n_mappings, nios2_num_r2_andi_n_mappings): New.
165 (nios2_r2_reg3_mappings, nios2_num_r2_reg3_mappings): New.
166 (nios2_r2_reg_range_mappings, nios2_num_r2_reg_range_mappings): New.
170 * i386-dis.c (OP_Mwaitx): New.
171 (rm_table): Add monitorx/mwaitx.
172 * i386-gen.c (cpu_flag_init): Add CpuMWAITX to CPU_BDVER4_FLAGS
173 and CPU_ZNVER1_FLAGS. Add CPU_MWAITX_FLAGS.
174 (operand_type_init): Add CpuMWAITX.
175 * i386-opc.h (CpuMWAITX): New.
176 (i386_cpu_flags): Add cpumwaitx.
177 * i386-opc.tbl: Add monitorx and mwaitx.
178 * i386-init.h: Regenerated.
179 * i386-tbl.h: Likewise.
183 * ppc-opc.c (insert_ls): Test for invalid LS operands.
184 (insert_esync): New function.
185 (LS, WC): Use insert_ls.
186 (ESYNC): Use insert_esync.
190 * dis-buf.c (buffer_read_memory): Fail is stop_vma is set and the
191 requested region lies beyond it.
192 * bfin-dis.c (print_insn_bfin): Ignore sysop instructions when
193 looking for 32-bit insns.
194 * mcore-dis.c (print_insn_mcore): Disable stop_vma when reading
196 * sh-dis.c (print_insn_sh): Likewise.
197 * tic6x-dis.c (print_insn_tic6x): Disable stop_vma when reading
198 blocks of instructions.
199 * vax-dis.c (print_insn_vax): Check that the requested address
200 does not clash with the stop_vma.
204 * ppc-dis.h (skip_optional_operands): Use ppc_optional_operand_value.
205 * ppc-opc.c (FXM4): Add non-zero optional value.
208 (insert_fxm): Handle new default operand value.
209 (extract_fxm): Likewise.
210 (insert_tbr): Likewise.
211 (extract_tbr): Likewise.
215 * arch64-opc.c (aarch64_sys_regs): Add "id_mmfr4_el1".
219 * arm-dis.c (print_insn_coprocessor): Avoid negative shift.
223 * ppc-opc.c: Add comment accidentally removed by old commit.
228 * ppc-opc.c: (powerpc_opcodes) <hwsync>: New extended mnemonic.
233 * msp430-dis.c (msp430_nooperands): Fix check for emulated insns.
237 * arm-dis.c (arm_opcodes): Add "setpan".
238 (thumb_opcodes): Add "setpan".
242 * arm-dis.c (select_arm_features): Rework to avoid used of redefined
247 * aarch64-tbl.h (aarch64_feature_rdma): New.
249 (aarch64_opcode_table): Add "sqrmlah" and "sqrdmlsh" instructions.
250 * aarch64-asm-2.c: Regenerate.
251 * aarch64-dis-2.c: Regenerate.
252 * aarch64-opc-2.c: Regenerate.
256 * aarch64-tbl.h (aarch64_feature_lor): New.
258 (aarch64_opdocde_table): Add "ldlar", "ldlarb", "ldlarh", "stllr",
260 * aarch64-asm-2.c: Regenerate.
261 * aarch64-dis-2.c: Regenerate.
262 * aarch64-opc-2.c: Regenerate.
266 * aarch64-opc.c (F_ARCHEXT): New.
267 (aarch64_sys_regs): Add "pan".
268 (aarch64_sys_reg_supported_p): New.
269 (aarch64_pstatefields): Add "pan".
270 (aarch64_pstatefield_supported_p): New.
274 * i386-tbl.h: Regenerate.
278 * i386-dis.c (print_insn): Swap rounding mode specifier and
279 general purpose register in Intel mode.
283 * i386-opc.tbl: New IntelSyntax entries for vcvt{,u}si2s{d,s}.
284 * i386-tbl.h: Regenerate.
288 * i386-opc.tbl: Remove Disp32 from AMD64 direct call/jmp.
289 * i386-init.h: Regenerated.
294 * i386-dis.c: Add comments for '@'.
295 (x86_64_table): Use '@' on call/jmp for X86_64_E8/X86_64_E9.
296 (enum x86_64_isa): New.
298 (print_i386_disassembler_options): Add amd64 and intel64.
299 (print_insn): Handle amd64 and intel64.
301 (OP_J): Don't ignore the operand size prefix for AMD64 in 64-bit.
302 * i386-gen.c (cpu_flags): Add CpuAMD64 and CpuIntel64.
303 * i386-opc.h (AMD64): New.
304 (CpuIntel64): Likewise.
305 (i386_cpu_flags): Add cpuamd64 and cpuintel64.
306 * i386-opc.tbl: Add direct call/jmp with Disp16|Disp32 for AMD64.
307 Mark direct call/jmp without Disp16|Disp32 as Intel64.
308 * i386-init.h: Regenerated.
309 * i386-tbl.h: Likewise.
313 * ppc-opc.c (IH) New define.
314 (powerpc_opcodes) <wait>: Do not enable for POWER7.
315 <tlbie>: Add RS operand for POWER7.
316 <slbia>: Add IH operand for POWER6.
320 * opcodes/i386-opc.tbl (call): Remove Disp16|Disp32 from 64-bit
323 * i386-tbl.h: Regenerated.
327 * configure.ac: Support bfd_iamcu_arch.
328 * disassemble.c (disassembler): Support bfd_iamcu_arch.
329 * i386-gen.c (cpu_flag_init): Add CPU_IAMCU_FLAGS and
330 CPU_IAMCU_COMPAT_FLAGS.
331 (cpu_flags): Add CpuIAMCU.
332 * i386-opc.h (CpuIAMCU): New.
333 (i386_cpu_flags): Add cpuiamcu.
334 * configure: Regenerated.
335 * i386-init.h: Likewise.
336 * i386-tbl.h: Likewise.
341 * i386-dis.c (X86_64_E8): New.
342 (X86_64_E9): Likewise.
343 Update comments on 'T', 'U', 'V'. Add comments for '^'.
344 (dis386): Replace callT/jmpT with X86_64_E8/X86_64_E9.
345 (x86_64_table): Add X86_64_E8 and X86_64_E9.
346 (mod_table): Replace {T|} with ^ on Jcall/Jmp.
348 (OP_J): Ignore the operand size prefix in 64-bit. Don't check
353 * disassemble.c (disassembler): Choose suitable disassembler based
355 * rl78-decode.opc (rl78_decode_opcode): Take ISA parameter. Use
356 it to decode mul/div insns.
357 * rl78-decode.c: Regenerate.
358 * rl78-dis.c (print_insn_rl78): Rename to...
359 (print_insn_rl78_common): ...this, take ISA parameter.
360 (print_insn_rl78): New.
361 (print_insn_rl78_g10): New.
362 (print_insn_rl78_g13): New.
363 (print_insn_rl78_g14): New.
364 (rl78_get_disassembler): New.
368 * po/fr.po: Updated French translation.
372 * ppc-opc.c (DCBT_EO): New define.
373 (powerpc_opcodes) <lbarx>: Enable for POWER8 and later.
377 <waitrsv>: Do not enable for POWER7 and later.
378 <waitimpl>: Likewise.
379 <dcbt>: Default to the two operand form of the instruction for all
380 "old" cpus. For "new" cpus, use the operand ordering that matches
381 whether the cpu is server or embedded.
386 * s390-opc.c: New instruction type VV0UU2.
387 * s390-opc.txt: Fix instruction types for VFCE, VLDE, VFSQ, WFK,
392 * i386-dis.c (putop): Extend "XY" handling to AVX512. Handle "XZ".
393 * i386-dis-evex.h.c (vcvtpd2ps, vcvtqq2ps, vcvttpd2udq,
394 vcvtpd2udq, vcvtuqq2ps, vcvttpd2dq, vcvtpd2dq): Add %XY.
395 (vfpclasspd, vfpclassps): Add %XZ.
399 * i386-dis.c (PREFIX_UD_SHIFT): Removed.
400 (PREFIX_UD_REPZ): Likewise.
401 (PREFIX_UD_REPNZ): Likewise.
402 (PREFIX_UD_DATA): Likewise.
403 (PREFIX_UD_ADDR): Likewise.
404 (PREFIX_UD_LOCK): Likewise.
408 * i386-dis.c (prefix_requirement): Removed.
409 (print_insn): Don't set prefix_requirement. Check
410 dp->prefix_requirement instead of prefix_requirement.
415 * i386-dis.c (PREFIX_0FC7_REG_6): Renamed to ...
416 (PREFIX_MOD_0_0FC7_REG_6): This.
417 (PREFIX_MOD_3_0FC7_REG_6): New.
418 (PREFIX_MOD_3_0FC7_REG_7): Likewise.
419 (prefix_table): Replace PREFIX_0FC7_REG_6 with
420 PREFIX_MOD_0_0FC7_REG_6. Add PREFIX_MOD_3_0FC7_REG_6 and
421 PREFIX_MOD_3_0FC7_REG_7.
422 (mod_table): Replace PREFIX_0FC7_REG_6 with
423 PREFIX_MOD_0_0FC7_REG_6. Use PREFIX_MOD_3_0FC7_REG_6 and
424 PREFIX_MOD_3_0FC7_REG_7.
428 * i386-dis.c (PREFIX_MANDATORY_REPZ): Removed.
429 (PREFIX_MANDATORY_REPNZ): Likewise.
430 (PREFIX_MANDATORY_DATA): Likewise.
431 (PREFIX_MANDATORY_ADDR): Likewise.
432 (PREFIX_MANDATORY_LOCK): Likewise.
433 (PREFIX_MANDATORY): Likewise.
434 (PREFIX_UD_SHIFT): Set to 8
435 (PREFIX_UD_REPZ): Updated.
436 (PREFIX_UD_REPNZ): Likewise.
437 (PREFIX_UD_DATA): Likewise.
438 (PREFIX_UD_ADDR): Likewise.
439 (PREFIX_UD_LOCK): Likewise.
440 (PREFIX_IGNORED_SHIFT): New.
441 (PREFIX_IGNORED_REPZ): Likewise.
442 (PREFIX_IGNORED_REPNZ): Likewise.
443 (PREFIX_IGNORED_DATA): Likewise.
444 (PREFIX_IGNORED_ADDR): Likewise.
445 (PREFIX_IGNORED_LOCK): Likewise.
446 (PREFIX_OPCODE): Likewise.
447 (PREFIX_IGNORED): Likewise.
448 (Bad_Opcode): Replace PREFIX_MANDATORY with 0.
449 (dis386_twobyte): Replace PREFIX_MANDATORY with PREFIX_OPCODE.
450 (three_byte_table): Likewise.
451 (mod_table): Likewise.
452 (mandatory_prefix): Renamed to ...
453 (prefix_requirement): This.
454 (prefix_table): Replace PREFIX_MANDATORY with PREFIX_OPCODE.
455 Update PREFIX_90 entry.
456 (get_valid_dis386): Check prefix_requirement to see if a prefix
458 (print_insn): Replace mandatory_prefix with prefix_requirement.
462 * arm-dis.c (thumb32_opcodes): Define 'D' format control code,
463 use it for ssat and ssat16.
464 (print_insn_thumb32): Add handle case for 'D' control code.
469 * i386-dis-evex.h (evex_table): Fill prefix_requirement field.
470 * i386-dis.c (PREFIX_MANDATORY_REPZ, PREFIX_MANDATORY_REPNZ,
471 PREFIX_MANDATORY_DATA, PREFIX_MANDATORY_ADDR, PREFIX_MANDATORY_LOCK,
472 PREFIX_UD_SHIFT, PREFIX_UD_REPZ, REFIX_UD_REPNZ, PREFIX_UD_DATA,
473 PREFIX_UD_ADDR, PREFIX_UD_LOCK, PREFIX_MANDATORY): Define.
474 (Bad_Opcode, FLOAT, DIS386, DIS386_PREFIX, THREE_BYTE_TABLE_PREFIX):
475 Fill prefix_requirement field.
476 (struct dis386): Add prefix_requirement field.
477 (dis386): Fill prefix_requirement field.
478 (dis386_twobyte): Ditto.
479 (twobyte_has_mandatory_prefix_: Remove.
480 (reg_table): Fill prefix_requirement field.
481 (prefix_table): Ditto.
482 (x86_64_table): Ditto.
483 (three_byte_table): Ditto.
486 (vex_len_table): Ditto.
487 (vex_w_table): Ditto.
490 (print_insn): Use prefix_requirement.
491 (FGRPd9_2, FGRPd9_4, FGRPd9_5, FGRPd9_6, FGRPd9_7, FGRPda_5, FGRPdb_4,
492 FGRPde_3, FGRPdf_4): Fill prefix_requirement field.
497 * d10v-opc.c (d10v_reg_name_cnt): Convert old style prototype.
501 * Makefile.in: Regenerated.
505 * ppc-dis.c (disassemble_init_powerpc): Only initialise
506 powerpc_opcd_indices and vle_opcd_indices once.
510 * ppc-opc.c (powerpc_opcodes): Add slbfee.
514 * arm-dis.c (opcode32): Updated to use new arm feature struct.
515 (opcode16): Likewise.
516 (coprocessor_opcodes): Replace bit with feature struct.
517 (neon_opcodes): Likewise.
518 (arm_opcodes): Likewise.
519 (thumb_opcodes): Likewise.
520 (thumb32_opcodes): Likewise.
521 (print_insn_coprocessor): Likewise.
522 (print_insn_arm): Likewise.
523 (select_arm_features): Follow new feature struct.
527 * i386-dis.c (rm_table): Add clzero.
528 * i386-gen.c (cpu_flag_init): Add new CPU_ZNVER1_FLAGS.
529 Add CPU_CLZERO_FLAGS.
530 (cpu_flags): Add CpuCLZERO.
531 * i386-opc.h: Add CpuCLZERO.
532 * i386-opc.tbl: Add clzero.
533 * i386-init.h: Re-generated.
534 * i386-tbl.h: Re-generated.
538 * mips-opc.c (decode_mips_operand): Fix constraint issues
539 with u and y operands.
543 * mips-opc.c (mips_builtin_opcodes): Add evp and dvp instructions.
547 * s390-opc.c: Add new IBM z13 instructions.
548 * s390-opc.txt: Likewise.
552 * aarch64-tbl.h (aarch64_opcode_table): Remove strub, ldurb, ldursb,
553 stur, ldur, sturh, ldurh, ldursh, ldursw, prfum F_HAS_ALIAS flag and
555 * aarch64-asm-2.c: Regenerate.
556 * aarch64-dis-2.c: Likewise.
557 * aarch64-opc-2.c: Likewise.
561 * arm-dis.c (arm_symbol_is_valid): Skip ARM private symbols.
565 * sh-opc.h (clrs, sets): Mark as arch_sh3_nommu_up instead of
567 (pref): Mark as arch_sh2a_nofpu_or_sh3_nommu_up instead of
568 arch_sh2a_nofpu_or_sh4_nommu_nofpu_up.
572 * rl78-decode.opc (MOV): Added space between two operands for
573 'mov' instruction in index addressing mode.
574 * rl78-decode.c: Regenerate.
578 * microblaze-dis.h [__cplusplus]: Wrap in extern "C".
583 * microblaze-opcm.h (or, and, xor): Rename to microblaze_or,
584 microblaze_and, microblaze_xor.
585 * microblaze-opc.h (opcodes): Adjust.
589 * Makefile.am: Add FT32 files.
590 * configure.ac: Handle FT32.
591 * disassemble.c (disassembler): Call print_insn_ft32.
592 * ft32-dis.c: New file.
593 * ft32-opc.c: New file.
594 * Makefile.in: Regenerate.
595 * configure: Regenerate.
596 * po/POTFILES.in: Regenerate.
600 * nds32-asm.c (keyword_sr): Add new system registers.
604 * s390-dis.c (s390_extract_operand): Support vector register
606 (s390_print_insn_with_opcode): Support new operands types and add
607 new handling of optional operands.
608 * s390-mkopc.c (s390_opcode_mode_val, s390_opcode_cpu_val): Remove
609 and include opcode/s390.h instead.
610 (struct op_struct): New field `flags'.
611 (insertOpcode, insertExpandedMnemonic): New parameter `flags'.
612 (dumpTable): Dump flags.
613 (main): Parse flags from the s390-opc.txt file. Add z13 as cpu
615 * s390-opc.c: Add new operands types, instruction formats, and
617 (s390_opformats): Add new formats for .insn.
618 * s390-opc.txt: Add new instructions.
622 Update year range in copyright notice of all files.
624 For older changes see ChangeLog-2014
626 Copyright (C) 2015 Free Software Foundation, Inc.
628 Copying and distribution of this file, with or without modification,
629 are permitted in any medium without royalty provided the copyright
630 notice and this notice are preserved.
636 version-control: never