Patch title: Release 92 bulk changes
Abstract:
File: /graphic/misc/bytes.pli
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"

public

function bytes_clear adr step count
  arg Address adr ; arg Int step count
  if step=1
    memory_clear adr count
    return
  var Address c := adr
  var Address stop := adr translate Byte step*count
  while c<>stop
    c map uInt8 := 0
    c := c translate Byte step

function bytes_fill adr step count
  arg Address adr ; arg Int step count
  if step=1
    var Address c := adr ; var Int remain := count
    while remain>=Int:size
      c map Int := -1
      c := c translate Int 1
      remain -= Int size
    while remain>0
      c map Int8 := -1
      c := c translate Int8 1
      remain -= 1
    return
  var Address c := adr
  var Address stop := adr translate Byte step*count
  while c<>stop
    c map uInt8 := 255
    c := c translate Byte step

function bytes_copy src src_step dest dest_step count
  arg Address src dest ; arg Int src_step dest_step count
  if src_step=1 and dest_step=1
    memory_copy src dest count
    return  
  var Address s := src
  var Address stop := src translate Byte src_step*count
  var Address d := dest
  while s<>stop
    d map uInt8 := s map uInt8
    s := s translate Byte src_step
    d := d translate Byte dest_step

function bytes_copy_255minus src src_step dest dest_step size
  arg Address src dest ; arg Int src_step dest_step size
  constant maxi (cast 2n^uInt:bitsize-1 uInt)
function bytes_copy_255minus src src_step dest dest_step count
  arg Address src dest ; arg Int src_step dest_step count
  var Address s := src
  var Address d := dest
  if src_step=1 and dest_step=1
    var Address stop := src translate Byte (size .and. .not. (uInt:size-1))
    var Address stop := src translate Byte (count .and. .not. (Int:size-1))
    while s<>stop
      d map uInt := maxi-(s map uInt)
      s := s translate uInt 1
      d := d translate uInt 1
  var Address stop := src translate Byte src_step*size
      d map Int := (-1) .-. (s map Int)
      s := s translate Int 1
      d := d translate Int 1
  var Address stop := src translate Byte src_step*count
  while s<>stop
    d map uInt8 := 255-(s map uInt8)
    s := s translate Byte src_step
    d := d translate Byte dest_step

function bytes_copy24 src src_step dest dest_step count
  arg Address src dest ; arg Int src_step dest_step count
  check count>0
  var Address s := src
  var Address stop := src translate Byte src_step*(count-1)
  var Address d := dest
  while s<>stop
    d map uInt32 := (s map uInt32) .and. 2^24-1
    s := s translate Byte src_step
    d := d translate Byte dest_step
  for (var Int c) 0 2
    d map uInt8 := s map uInt8
    s := s translate Byte 1
    d := d translate Byte 1

function bytes_xor src dest size
  arg Address src dest ; arg Int size
  var Address s := src ; var Address d := dest
  var Int remain := size
  while remain>=uInt:size
    d map uInt := (d map uInt) .xor. (s map uInt)
    s := s translate uInt 1
    d := d translate uInt 1
    remain -= Int:size
  while remain>0
    d map uInt8 := (d map uInt8) .xor. (s map uInt8)
    s := s translate uInt8 1
    d := d translate uInt8 1
    remain -= 1