• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 
6 #include <xnnpack/assembler.h>
7 
8 #include <xnnpack/allocator.h>
9 
10 namespace xnnpack {
11 
AssemblerBase(xnn_code_buffer * buf)12 AssemblerBase::AssemblerBase(xnn_code_buffer* buf) {
13   buffer_ = reinterpret_cast<byte*>(buf->code);
14   cursor_ = buffer_;
15   top_ = buffer_ + buf->capacity;
16   xnn_buffer = buf;
17 }
18 
emit32(uint32_t value)19 void AssemblerBase::emit32(uint32_t value) {
20   if (error_ != Error::kNoError) {
21     return;
22   }
23 
24   if (cursor_ + sizeof(value) > top_) {
25     error_ = Error::kOutOfMemory;
26     return;
27   }
28 
29   memcpy(cursor_, &value, sizeof(value));
30   cursor_ += sizeof(value);
31 }
32 
33 
finalize()34 void* AssemblerBase::finalize() {
35   xnn_buffer->size = code_size_in_bytes();
36   if (xnn_finalize_code_memory(xnn_buffer) != xnn_status_success) {
37     error_ = Error::kFinalizeCodeMemoryFail;
38   }
39   return reinterpret_cast<void*>(buffer_);
40 }
41 
reset()42 void AssemblerBase::reset() {
43   cursor_ = buffer_;
44   error_ = Error::kNoError;
45 }
46 
47 }  // namespace xnnpack
48