about summary refs log tree commit diff stats
path: root/subx/037heap.cc
blob: 315fd0d58f00869f01ae9167686a3acbfa54cafb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//: Support for dynamic allocation.
//:
//: Just provide a special label marking the first unused address in the data
//: segment. Then we'll write SubX helpers to make use of it.

:(before "Begin rewrite_global_variables")
insert_heap_global_variable(p);
:(code)
void insert_heap_global_variable(program& p) {
  if (SIZE(p.segments) < 2)
    return;  // no data segment defined
  // Start-of-heap:
  p.segments.at(1).lines.push_back(label("Start-of-heap"));
}

line label(string s) {
  line result;
  result.words.push_back(word());
  result.words.back().data = (s+":");
  return result;
}

line imm32(const string& s) {
  line result;
  result.words.push_back(word());
  result.words.back().data = s;
  result.words.back().metadata.push_back("imm32");
  return result;
}