A little bit of guesswork, again (I'm not working on the compiler)
`mapaccess1` is obviously for map index expressions of the form `m[key]`, while `mapaccess2` is for assignments like `a, ok := m[key]`.
And AIUI the non-`_fat` versions are used if the value-type of the map is too large to fit into a pre-allocated array of zero-bytes. In that case, the runtime gets passed a separate pointer to a zero-value of that type to use as the default - I assume, in that case the compiler emits code to allocate (on the stack or the heap) zeroed memory of the appropriate size and passes that to `mapaccess1_fat`.
Hope that helps, even though I'm guessing :)