risc0-zkvm-circuit 0.1.0

RISC Zero zero-knowledge VM circuit crate
Documentation
// Copyright 2022 Risc0, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once

#include "risc0/zkvm/circuit/cycle.h"

namespace risc0::circuit {

struct DivideCycle {
  DivideCycle(BufAlloc& alloc)
      : resultInfo(alloc)
      , denom(alloc)
      , quot(alloc)
      , rem(alloc)
      , denomMinusRem(alloc)
      , numer0(alloc)
      , numer1(alloc)
      , numer2(alloc)
      , negNumer(alloc)
      , negDenom(alloc)
      , negResult(alloc)
      , carryDMR(alloc)
      , negNumerImpl(alloc)
      , negDenomImpl(alloc)
      , negResultImpl(alloc)
      , denomNonzero(alloc)
      , quot32(alloc)
      , rem32(alloc)
      , numer32(alloc) {}

  void set(StepState& state);

  ResultInfoRegs resultInfo;
  RegDigits<2, 32> denom;
  RegDigits<2, 32> quot;
  RegDigits<2, 32> rem;
  RegDigits<2, 32> denomMinusRem;
  RegDigits<2, 24> numer0;
  RegDigits<2, 20> numer1;
  RegDigits<2, 8> numer2;
  RegBin negNumer;
  RegBin negDenom;
  RegBin negResult;
  RegBin carryDMR;
  NegU32Regs negNumerImpl;
  NegU32Regs negDenomImpl;
  NegU32Regs negResultImpl;
  MakeBoolRegs denomNonzero;
  RegU32 quot32;
  RegU32 rem32;
  RegU32 numer32;
};

} // namespace risc0::circuit