title: Which part of this C code is missing or needs to be altered?
body: <p>For my assignment, I have to fill in missing parts of the C code below. 
  However, I am not sure which parts are missing or which part I have to fill in.
  I have a sample assembly code which this code will generate, but do not know which parts I have to change to get my expected result. I am just looking for clarification.</p>
  
  <pre><code>typedef enum {MODE_A, MODE_B, MODE_C, MODE_D, MODE_E} mode_t;
  long switch3 (long *p1, long *p2, mode_t action) {
    long result = 0;
    switch(action){
    case MODE_A:
    case MODE_B:
    case MODE_C:
    case MODE_D:
    case MODE_E:
    default;
    }
    return result;
  }
  </code></pre>
  
  <p>Other points:</p>
  
  <ul>
  <li>There may be cases that should be written in the C
  code with a fall-through</li>
  <li>Code shows branching on an enumerated type value in a switch
  statement. (Question: what exactly does this mean in simple terms? My professor provided a complex definition that I do not understand.)</li>
  </ul>
  
  <p><strong>Assembly code result example:</strong></p>
  
  <pre><code># p1 in %rdi, p2 in %rsi, action in %edx
  .L2:                         # MODE_E
        movl    $27, %eax
        ret
  .L7:                         # MODE_A
        movl    (%rsi), %rax
        movq    (%rdi), %rdx
        movq     %rdx, (%rsi)
        ret
  .L5:                         # MODE_B
        movq     (%rdi), %rax
        addq     (%rsi), %rax
        movq      %rax, (%rdi)
        ret
  .L4:                         # MODE_C
        movq     $59, (%rdi)
        movq     (%rsi), %rax
        ret
  .L3:                         # MODE_D
        movq     (%rsi), %rax
        movq      %rax, (%rdi)
        movl      $27, %eax
        ret
  .L8:                         # default
        movl      $12, %eax
        ret
  </code></pre>